深拷贝(deepcopy)与浅拷贝(copy)的区别
1.深拷贝与浅拷贝
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):是对于一个对象的顶层拷贝,拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): 是对于一个对象所有层次的拷贝(递归),完全拷贝了父对象及其子对象。
对象的引用(内存地址)”赋值给变量的,在python中有6个标准数据类型,他们分为可变和不可变两类。
- 不可变类型:Number(数字)String(字符串)Tuple(元组)
- 可变类型:List(列表)Dictionary(字典)Set(集合)
浅拷贝(copy)
1.浅拷贝会创建一个新的容器对象(compound object)
2.对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)
常见的浅拷贝操作有:
- 使用切片操作[:]
- 使用工厂函数(如list/dict/set)
- copy模块的copy()方法
注意点:
- copy.copy对于不可变类型,不会拷贝,仅仅是指向内存地址.
>>> a="1234567"
>>> b=a
>>> id(a)
4367619440
>>> id(b)
4367619440
>>> c=copy.copy(a)
>>> id(c)
4367619440
>>> d=copy.deepcopy(a)
>>> id(d)
4367619440
- copy.copy对于可变类型会进行浅拷贝,生成新的内存地址,但会出现以下两种场景:
1>拷贝对象中无可变类型元素,原对象的元素值改变不影响新对象的元素值.
2>拷贝对象中存在可变类型元素A(例如列表中的子元素是一个字典),拷贝时新对象中可变类型元素A,两者指向同一个内存地址,如果拷贝对象A的值改变,新对象A也会跟着改变.
>>> import copy
>>> list1=[1,2,['a','b']]
>>> list2=list1
>>> list3=copy.copy(list2)
>>> list4=copy.deepcopy(list3)
>>> id(list1)
4338414656
>>> id(list2)
4338414656
>>> id(list3)
4338415016
>>> id(list4)
4338414368
>>> list1[2].append('a')
>>> id(list1)
4338414656
>>> print list1
[1, 2, ['a', 'b', 'a']]
>>> print list3
[1, 2, ['a', 'b', 'a']]
>>> print list4
[1, 2, ['a', 'b']]
>>> list1.append(33)
>>> id(list1)
4338414656
>>> id(list3)
4338415016
>>> print list1
[1, 2, ['a', 'b', 'a'], 33]
>>> print list3
[1, 2, ['a', 'b', 'a']]
深拷贝(deepcopy)
1.深拷贝和浅拷贝一样,都会创建一个新的容器对象(compound object)
2.和浅拷贝的不同点在于,深拷贝对于对象中的元素,深拷贝都会重新生成一个新的对象
深拷贝(deepcopy)与浅拷贝(copy)的区别相关推荐
- Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- python deepcopy_python中的深拷贝(deepcopy)和浅拷贝(copy)介绍及代码参考
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.以下分两个思路来分别理解浅拷贝和深拷贝: (1) ...
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...
- python对象复制_Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
源码阅读系列:EventBus title: 源码阅读系列:EventBus date: 2016-12-22 16:16:47 tags: 源码阅读 --- EventBus 是人们在日常开发中经常 ...
- 深入理解Python深拷贝(deepcopy)、浅拷贝(copy)、等号拷贝----看了还不懂找我
编程中难免会遇到copy(浅拷贝)与deepcopy(深拷贝)问题,一不小心就会掉进坑中了,或许很多人只知道有深浅拷贝,但是你又知道copy和"="拷贝有什么区别么?也许很少有人对 ...
- Python中copy,deepcopy,浅拷贝(“=”)和深拷贝(“copy.deepcopy()”)
python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式.其中浅拷贝由"="完成.而深拷贝由copy模块中deepcopy()函数担任. 浅拷贝和深拷 ...
- 浅拷贝copy(“=”)和深拷贝(“copy.deepcopy()”)
python中对于对象的拷贝分为浅拷贝(copy)和深拷贝(deepcopy)两种方式. 其中浅拷贝由"="完成.而深拷贝由copy模块中deepcopy()函数担任. 浅拷贝和深 ...
- Python 玩转数据 5 - 图解 Python 赋值,浅拷贝 copy.copy() 和 深拷贝 copy.deepcopy() 原理
引言 上面文章有介绍 Python 动态类型 共享引用等相关知识,有这个基础,我们来深入研究一下 Python 赋值,拷贝的原理,有涉及到可变类型和不可变类型的不同处理.更多 Pyton 进阶系列文章 ...
- XenServer中Fast Copy与Full Copy的区别
详细跟踪了一下LVM-Based VDI与File-Based VDI的复制与链接过程,我们可以发现,Fast Copy与Full Copy有很大的区别,不同的形式对虚机VBD的性能具有一定的影响. ...
最新文章
- 【矩阵运算c++实现】矩阵封装实现Matrix类
- 视频专辑:张孝祥Java邮件开发
- GitHub 重磅更新:无限私有仓库免费使用
- BM微型计算机2283,微型计算机原理及接口技术钢琴课程设计最新.doc
- weblogic 安装教程
- 人工神经网络之BP神经网络模型
- 手机ppt怎么添加页码_全网超详细的操作教程,手把手教你使用高效PPT小技巧!...
- DotNetMagic 5.4.0破解
- chrome 使用gpu 加速_一招解决 Chrome / Edge 卡顿缓慢 让浏览器重回流畅顺滑
- 国家广电总局:常规电视剧剧集正片时长不少于41分钟
- Loopback、Null0接口揭秘
- 实习成长之路:MySQL四:深入浅出索引
- python 小程序——快递分拣程序
- 2021年全球与中国汽车TSR(交通标志识别)系统行业市场规模及发展前景分析
- Unity3D坦克大战项目总结
- 为什么ios比android流畅
- 智慧城市投入与产出相关分析预评估模型研究
- 新手建网站怎样在运营方面渐入佳境
- 王学岗性能优化————APP启动优化(黑白屏问题的解决,trace工具的使用,热启动与冷启动的区别)
- ceph cluster client(RBD)
热门文章
- Animation Frame动画实现应用的欢迎界面
- 兔子生兔子问题(斐波那契数列)
- PHP的几种加密解密算法
- Apollo学习(超详细)
- mybatis -- 懒加载原理
- telnet找不到这个服务器,Win7找不到Telnet服务如何解决?Win7找不到Telnet服务的解决方法...
- php中stmt是什么意思,PHP的mysqli_stmt_init()函数讲解
- 2022年,计算机保研er需要海投吗?
- modulate与modem
- yolo.h5文件问题的解决 - 吴恩达深度学习:目标检测之YOLO算法