当前位置: 首页 > 后端技术 > Python

python中浅拷贝和深拷贝解析的详细介绍

时间:2023-03-26 17:17:01 Python

首先,我们知道在Python3中,有6种标准数据类型,分为可变和不可变。不可变的:Number(数字)、String(字符串)、Tuple(元组)。可以改变的有:List(列表)、Dictionary(词典)、Set(集合)。1、浅拷贝a和b是独立的对象,但是它们的子对象仍然指向同一个对象(引用)。浅拷贝后,改变原对象中可变类型元素的值,会同时影响复制的对象;改变原对象中不可变类型元素的值不会影响复制对象。#定义一个列表,第一个元素是变量类型>>>A=[[1,2],'fei',90]#浅拷贝>>>B=copy.copy(A)#是对象地址相同>>>AisBFalse#第一个元素的地址是否相同>>>A[0]isB[0]True#第二个元素的地址是否相同>>>A[1]isB[1]True#Change第一个变量类型的值,查看复制对象的变化>>>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]2.完全深拷贝a和b复制父对象及其子对象,两者是完全独立的。深拷贝,除了顶层拷贝,还会拷贝子元素。深拷贝后,原对象和拷贝对象的所有可变元素地址不再相同。#深拷贝>>>C=copy.deepcopy(A)#对象地址是否相同>>>A为CFalse#首元素地址是否相同>>>A[0]为C[0]False#的second元素地址是否相同>>>A[1]isC[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是B3.赋值引用a和b都指向同一个对象'''学习中遇到问题没人回答它?小编创建了一个Python学习交流QQ群:531509025,寻找志同道合的小伙伴,互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#赋值引用>>>A=[[1,2],'fei',90]>>>D=A#对象地址是否相同>>>A为DTrue#是否首元素地址是一样的>>>A[0]isD[0]True#第二个元素的地址是否一样>>>A[1]isD[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],'安妮',90]>>>D[[2,2],'安妮',90]>>>