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没有变化
深拷贝原理图:


浙公网安备 33010602011771号