关于赋值和深浅拷贝

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完全等同

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权,转载请注明出处。
文章名称:《关于赋值和深浅拷贝》
文章来自:泰恩数据
文章链接:https://tyne.cc/101.html
本站资源仅供个人学习使用,请勿用于商业用途。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址