对python中浅拷贝和深拷贝分析详细介绍
2021/9/7 22:06:17
本文主要是介绍对python中浅拷贝和深拷贝分析详细介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
首先,我们知道Python3中,有6个标准的数据类型,他们又分为可以变和不可变。
- 不可变:Number(数字)、String(字符串)、Tuple(元组)。
- 可以变:List(列表)、Dictionary(字典)、Set(集合)。
一.浅拷贝
a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。
#定义一个列表,第一个元素是可变类型>>> A = [[1,2],'fei',90]#浅拷贝 >>> B = copy.copy(A)#对象地址是否相同 >>> A is B False#第一个元素地址是否相同 >>> A[0] is B[0] True#第二个元素地址是否相同 >>> A[1] is B[1] True#改变第一个可变类型的值,查看复制对象变化 >>> A[0][0] = 2 >>> A [[2, 2], 'fei', 90]#复制对象也跟着改变了 >>> B [[2, 2], 'fei', 90]#改变第二个不可变类型的值,查看复制对象变化 >>> A[1] = 'anne' >>> A [[2, 2], 'anne', 90]#复制对象没有改变 >>> B [[2, 2], 'fei', 90]
二.深拷贝
a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。
#深拷贝>>> C = copy.deepcopy(A)#对象地址是否相同 >>> A is C False#第一个元素地址是否相同 >>> A[0] is C[0] False#第二个元素地址是否相同 >>> A[1] is C[1] True#改变第一个元素,查看复制元素变化 >>> A[0][0] = 2 >>> A [[2, 2], 'fei', 90]#复制元素不变,对复制元素没影响 >>> C [[1, 2], 'fei', 90] #改变第二个元素,查看复制元素变化 >>> A[1] = 'Anne' >>> A[[2, 2], 'Anne', 90] #复制元素不变,对复制元素没影响 >>> C[[1, 2], 'fei', 90]
在这里看到一个让我困惑的问题,A is B
三.赋值引用
a 和 b 都指向同一个对象
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:531509025 #寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! #赋值引用 >>> A = [[1,2],'fei',90] >>> D = A #对象地址是否相同 >>> A is D True #第一个元素地址是否相同 >>> A[0] is D[0] True #第二个元素地址是否相同 >>> A[1] is D[1] True #改变A中第一个元素,查看是否影响D >>> A[0][0] = 2 >>> A [[2, 2], 'fei', 90] #D中第一个元素也跟着改变 >>> D [[2, 2], 'fei', 90] #改变D中第二个元素,查看是否影响A >>> D[1] = 'anne' #A中第二个元素也改变了 >>> A [[2, 2], 'anne', 90] >>> D [[2, 2], 'anne', 90] >>>
这篇关于对python中浅拷贝和深拷贝分析详细介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型
- 2024-12-23使用python部署一个usdt合约,部署自己的usdt稳定币
- 2024-12-20Python编程入门指南