Python的深拷贝和浅拷贝问题(转载)
转载的原文链接:
https://blog.csdn.net/qq_42659468/article/details/118582508?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-118582508-blog-117433717.pc_relevant_antiscanv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-118582508-blog-117433717.pc_relevant_antiscanv3&utm_relevant_index=2
浅拷贝1和浅拷贝2
深拷贝
浅拷贝1:
直接赋值
a和b在内存中的位置是一样的。
原理图:
浅拷贝2:
copy函数
以上可以看出copy()函数产生的是新的对象,两个不同的字典指向内存中不同的位置,但是执行copy(),由于字典a的值是个列表不是基础类型数据,python不会重新存储,只是采用引用的方式指向原来的值,所以tmp中字典a的值改变了导致tmp1相应的值也改变了。
接下来看下另外一种情况:
step1:
step2:
step3:
remove了tmp1中的一个字典中的基础类型子对象,tmp没改变了。由于更改的数据类型是基础类型:int类型,所以copy过程中,python会重新分配新的内存地址,
原理图:
深拷贝: deepcopy()
第一步:深拷贝
第二步
第三步 查看tmp内容
tmp没有变化
深拷贝原理图: