自己总结关于赋值和复制(深浅拷贝)

Posted Mr_huangze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己总结关于赋值和复制(深浅拷贝)相关的知识,希望对你有一定的参考价值。

a=[1,2,[3,4],{\'a\':1}] # 原始对象
b=a # 赋值,传对象的引用
c=copy.copy(a) # 对象拷贝,浅拷贝
d=copy.deepcopy(a) # 对象拷贝,深拷贝
e=a[:] # 能复制序列,浅拷贝

对于赋值,浅拷贝,深拷贝我的理解为:
1.b和a之间赋值关系,对象的每个元素,指向完全相同,同步变化
a和b之中任意一个元素删减,都会引起相同的变化
2.c与a为浅拷贝关系,也就是说列表的最外一层为拷贝关系(非赋值关系),
仅仅是把外层元素拷贝过来而已,引用关系没有拷贝,所以在外层元素中,
当元素只有一层时,c与a变化没有关联,但此时从外到内第二层开始还是有引用关系,
在元素变化上面具有相关性,一起变化
3.d和a为深拷贝,d和a完全不具备引用关系,a的元素无论如何变化,甚至a被删除 (del a)
列表d不会受到任何影响
4.e属于复制序列,相当于浅拷贝,与c完全等同

以上是关于自己总结关于赋值和复制(深浅拷贝)的主要内容,如果未能解决你的问题,请参考以下文章

深浅拷贝,赋值

深浅拷贝

C++ STL主要组件之String总结(第二部分 深浅拷贝问题以及赋值运算符重载)

(二十五)python 3 深浅拷贝

深浅拷贝

深浅拷贝