python中copy和deepcopy的使用区别
python中标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。
deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。
浅拷贝,不会产生独立对象,等于赋值,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。浅拷贝等于赋值,也可以通过copy实现,copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,如果对子对象进行修改,拷贝结果也会随着修改。
- 复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
- 复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
import copy a = [1,2,3,[4,5],1] b = a c = copy.copy(a) d = copy.deepcopy(a) a.append(9) a[3].append(6) print(a) #[1, 2, 3, [4, 5, 6], 1, 9] print(b) #[1, 2, 3, [4, 5, 6], 1, 9] print(c) #[1, 2, 3, [4, 5, 6], 1] print(d) #[1, 2, 3, [4, 5], 1] print(id(a)) #4594148288 print(id(b)) #4594148288 print(id(c)) #4594455328 print(id(d)) #4592688496 x = 'Hello World' y = x z = copy.copy(x) w = copy.deepcopy(x) print(id(x)) #4617118576 print(id(y)) #4617118576 print(id(z)) #4617118576 print(id(w)) #4617118576 # 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同 # 对于可变类型(列表、字典等)为深拷贝,
到此这篇关于python中copy和deepcopy的使用区别的文章就介绍到这了,更多相关python copy deepcopy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- python中浅复制copy与深复制deepcopy
- 图解Python中浅拷贝copy()和深拷贝deepcopy()的区别
- Python copy()与deepcopy()方法之间有什么区别
- python中list列表复制的几种方法(赋值、切片、copy(),deepcopy())
- Python 中的 copy()和deepcopy()
- Python-copy()与deepcopy()区别详解
- Python中浅拷贝copy与深拷贝deepcopy的简单理解
- python中copy()与deepcopy()的区别小结
- 浅谈python中copy和deepcopy中的区别
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
相关文章
Django报错TemplateDoesNotExist的问题及解决
这篇文章主要介绍了Django报错TemplateDoesNotExist的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08python中protobuf和json互相转换应用处理方法
protobuf目前有proto2和proto3两个版本,本文所介绍的是基于proto3,在Python 3.6.9环境下运行,本文记录一下python中protobuf和json的相互转换的处理方法,感兴趣的朋友跟随小编一起看看吧2022-12-12
最新评论