图解Python中深浅copy(通俗易懂)


Posted in Python onSeptember 03, 2020

一、深浅copy

赋值运算

l1 = [1, 2, 3, [22, 33]]
l2 = l1
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33], 666]

图解:

图解Python中深浅copy(通俗易懂)

注意:l2 = l1是一个指向,是赋值,和深浅copy无关。

浅copy

其实列表是一个一个的槽位,每个槽位存储的是该对象的内存地址

例1. 给大列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
# 或者下面这种方式,也是浅copy
# import copy
# l2 = copy.copy(l1)
l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

例2. 给小列表添加元素
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[-1].append(666)

print(l1) # [1, 2, 3, [22, 33, 666]]
print(l2) # [1, 2, 3, [22, 33, 666]]、

例3. 将l1列表中第一个元素改为6
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 6

print(l1) # [6, 2, 3, [22, 33]]
print(l2) # [1, 2, 3, [22, 33]]

图解:

例1

图解Python中深浅copy(通俗易懂)

例2

图解Python中深浅copy(通俗易懂)

例3

图解Python中深浅copy(通俗易懂)

总结:

浅copy:会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

注意:

切片中,如果是全切,属于浅copy。

深copy

import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
l1.append(666)
print(l1) # [1, 2, 3, [22, 33], 666]
print(l2) # [1, 2, 3, [22, 33]]

图解:

本质如下图:

图解Python中深浅copy(通俗易懂)

但是python对深copy做了一个优化,将可变的数据类型在内存中重新创建一份,而不可变的数据类型则沿用之前的,所以内存中是下面这样的:

图解Python中深浅copy(通俗易懂)

总结:

深copy:会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

到此这篇关于图解Python中深浅copy(通俗易懂)的文章就介绍到这了,更多相关Python 深浅拷贝内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python中操作符重载用法分析
Apr 29 Python
python递归查询菜单并转换成json实例
Mar 27 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
基于Django与ajax之间的json传输方法
May 29 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
python Tkinter的图片刷新实例
Jun 14 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
浅谈pycharm使用及设置方法
Sep 09 Python
python文字转语音的实例代码分析
Nov 12 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
python简单实现9宫格图片实例
Sep 03 #Python
django使用graphql的实例
Sep 02 #Python
django数据模型中null和blank的区别说明
Sep 02 #Python
sqlalchemy实现时间列自动更新教程
Sep 02 #Python
解决Python 函数声明先后顺序出现的问题
Sep 02 #Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 #Python
详解python with 上下文管理器
Sep 02 #Python
You might like
一个图形显示IP的PHP程序代码
2007/10/19 PHP
php session处理的定制
2009/03/16 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
jquery.validate使用详解
2016/06/02 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
vue实现点击当前标签高亮效果【推荐】
2018/06/22 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
关于JavaScript中异步/等待的用法与理解
2020/11/18 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
运动会开幕式解说词
2014/02/05 职场文书
安卓程序员求职信
2014/02/28 职场文书
创先争优个人承诺书
2014/08/30 职场文书
初中政治教学工作总结
2015/08/13 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python