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

   import copy
完全理解python深拷贝和浅拷贝
= [1234, [ab]]  #原始对象
完全理解python深拷贝和浅拷贝

完全理解python深拷贝和浅拷贝
= a  #赋值,传对象的引用
完全理解python深拷贝和浅拷贝
= copy.copy(a)  #对象拷贝,浅拷贝
完全理解python深拷贝和浅拷贝
= copy.deepcopy(a)  #对象拷贝,深拷贝
完全理解python深拷贝和浅拷贝

完全理解python深拷贝和浅拷贝a.append(
5)  #修改对象a
完全理解python深拷贝和浅拷贝
a[4].append(c)  #修改对象a中的[‘a‘, ‘b‘]数组对象
完全理解python深拷贝和浅拷贝

完全理解python深拷贝和浅拷贝
print a = , a
完全理解python深拷贝和浅拷贝
print b = , b
完全理解python深拷贝和浅拷贝
print c = , c
完全理解python深拷贝和浅拷贝
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
完全理解python深拷贝和浅拷贝
= [1234, [ab]]  #原始对象
完全理解python深拷贝和浅拷贝

完全理解python深拷贝和浅拷贝
= a  #赋值,传对象的引用
完全理解python深拷贝和浅拷贝
= copy.copy(a)  #对象拷贝,浅拷贝
完全理解python深拷贝和浅拷贝
= 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
完全理解python深拷贝和浅拷贝
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深拷贝和浅拷贝,布布扣,bubuko.com

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

上一篇:rwkj 1391C++:泛型编程(看病要排队)


下一篇:七日Python之路--第九天