完全理解python深拷贝和浅拷贝

   import copy
= [1234, [ab]]  #原始对象

= a  #赋值,传对象的引用
= copy.copy(a)  #对象拷贝,浅拷贝
= copy.deepcopy(a)  #对象拷贝,深拷贝

a.append(
5)  #修改对象a
a[4].append(c)  #修改对象a中的[‘a‘, ‘b‘]数组对象

print a = , a
print b = , b
print c = , c
print d = , d


输出结果:
a =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
b =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘], 5]
c =  [1, 2, 3, 4, [‘a‘, ‘b‘, ‘c‘]]
d =  [1, 2, 3, 4, [‘a‘, ‘b‘]]

再来了解一下怎么copy的。

   import copy
= [1234, [ab]]  #原始对象

= a  #赋值,传对象的引用
= copy.copy(a)  #对象拷贝,浅拷贝
= copy.deepcopy(a)  #对象拷贝,深拷贝

   print id(a[0]),id(a[1]),id(a[2]),id(a[3]),id(a[4]),id(a[4][0]),id(a[4][1])
   print id(c[0]),id(c[1]),id(c[2]),id(c[3]),id(c[4]),id(a[4][0]),id(a[4][1])
   print id(d[0]),id(d[1]),id(d[2]),id(d[3]),id(d[4]),id(a[4][0]),id(a[4][1])

   a.append(5)  #修改对象a
a[4].append(c)  #修改对象a中的[‘a‘, ‘b‘]数组对象

   print id(a[0]),id(a[1]),id(a[2]),id(a[3]),id(a[4]),id(a[4][0]),id(a[4][1])
   print id(c[0]),id(c[1]),id(c[2]),id(c[3]),id(c[4]),id(a[4][0]),id(a[4][1])
   print id(d[0]),id(d[1]),id(d[2]),id(d[3]),id(d[4]),id(a[4][0]),id(a[4][1])

输出结果:

32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 41296480 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 40936712 31936000 31936024
32303840 32303828 32303816 32303804 41296480 31936000 31936024

可以明显的看到,浅拷贝只是拷贝父对象的所有内容,而深拷贝则对子对象新建一个对象,再拷贝内容,所以,当子对象发生改变时,浅拷贝会发生改变,而深拷贝不会发生改变。




完全理解python深拷贝和浅拷贝,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。