这篇文章主要介绍了python深拷贝和浅拷贝区别对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先先看一段代码
进口复制=(1、2、3,[4]] b=一个 c=a.copy () d=copy.deepcopy (a) e=copy.copy (a) a.append (4) 一个[3].append (5) 打印(“一个值为{}地址为{}”。格式(一个id ())) print (" b值为{}地址为{}”。格式(b, id (b))) 打印(' c值为{}地址为{}”。格式(c, id (c))) 打印(' d值为{}地址为{}”。格式(d id (d))) 打印(' e值为{}地址为{}”。格式(e, id (e)))
执行结果:
一个值为(1、2、3,(4、5),4]地址为4555940360 b值为1、2、3,(4、5),4]地址为4555940360 (1、2、3 c值为,[4,5]]地址为4555873544 (1、2、3 d值为,[4]]地址为4556227912 e值为1、2、3,[4,5]]地址为4556227464
从结果中可以看出来:
b赋值的为一个的内存地址,值会随着一个的变化而变化——直接赋值,对象引用
c=a.copy()使用的为python自带副本的方法,从结果中可看出复制后c的地址与一个的地址不一致,也就是c将的值完全复制包括地址,其结果就是c的值不会随着一个的值变化而变化- - -深拷贝,完全拷贝了父对象及其子对象
d和e使用的是python自带的复制模块中复制的方法和deepcopy方法:
其中d的值地址和一个不一致,值也不会随着一个的变化而变化- - -深拷贝,完全拷贝了父对象及其子对象
其中e中父级内容不随着一个的变化而变化,但e中子列表中内容会随着一个的变化而变化——浅拷贝,拷贝父对象,不会拷贝对象的内部的子对象
print(“子对象值为{}地址为{}”。格式([3],id ([3]))) 打印(' e子对象值为{}地址为{}”。格式([3],id ([3]))) 结果: 一子对象值为(4、5)地址为4334486344 e子对象值为(4、5)地址为4334486344
由上可得出,python中分的副本为三种:
1,直接复制:也就是对象引用
2,浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。
3,深拷贝:完全拷贝了父对象及其子对象
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。