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没有变化

深拷贝原理图:

 

posted @ 2022-06-16 11:22  猪大大BiuBiuBiu  阅读(56)  评论(0编辑  收藏  举报