首页 > 编程语言 > 详细

python深拷贝与浅拷贝

时间:2015-07-18 07:13:21      阅读:253      评论:0      收藏:0      [点我收藏+]

浅拷贝:b=copy.copy(a),对引用的拷贝,只拷贝父对象,所以id(b)不等于id(a),但对象内部资源依然引用,内部id(b[0])等于id(a[0]),id(b[4])等于id(a[4])

深拷贝:c=copy.deepcopy(a),对对象资源的拷贝,id(c)不等于id(a),内部id(c[0])等于id(a[0]),id(c[4])不等于id(a[4])


注意:因为数字是不可变量,所以数字的id不变,无论深拷贝还是浅拷贝,id(b[0])、id(c[0])都等于id(a[0]);列表是可变变量,所以列表的id如果是深拷贝会变,id(c[4])不等于id(a[4])


参考代码如下:

>>> import copy
>>> a=[0,1,2,3,[4,5,6]]
>>> id(a)
33174592
>>> id(a[0])
33542860
>>> id(a[4])
44499872
>>> id(a[4][0])
33542812
>>> b=a
>>> id(b)
33174592
>>> id(b[0])
33542860
>>> id(b[4])
44499872
>>> id(b[4][0])
33542812
>>> b=copy.copy(a)
>>> id(b)
38384984
>>> id(b[0])
33542860
>>> id(b[4])
44499872
>>> id(b[4][0])
33542812
>>> b[4][0]=44
>>> b
[0, 1, 2, 3, [44, 5, 6]]
>>> a
[0, 1, 2, 3, [44, 5, 6]]
>>> b[0]=9
>>> b
[9, 1, 2, 3, [44, 5, 6]]
>>> a
[0, 1, 2, 3, [44, 5, 6]]
>>> id(a)
33174592
>>> id(a[4])
44499872
>>> id(a[4][0])
33542332
>>> c=copy.deepcopy(a)
>>> c
[0, 1, 2, 3, [44, 5, 6]]
>>> id(c)
44501232
>>> id(c[4])
44500912
>>> id(c[4][0])
33542332
>>> id(a[0])
33542860
>>> id(c[0])
33542860
>>> a
[0, 1, 2, 3, [44, 5, 6]]
>>> c
[0, 1, 2, 3, [44, 5, 6]]
>>> c[4][0]=444
>>> c
[0, 1, 2, 3, [444, 5, 6]]
>>> a
[0, 1, 2, 3, [44, 5, 6]]
>>>


本文出自 “今日的努力,明日的成功!” 博客,请务必保留此出处http://zhzhgo.blog.51cto.com/10497096/1675845

python深拷贝与浅拷贝

原文:http://zhzhgo.blog.51cto.com/10497096/1675845

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!