码迷,mamicode.com
首页 > 编程语言 > 详细

python深拷贝与浅拷贝

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

标签:python   深拷贝与浅拷贝   

浅拷贝: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深拷贝与浅拷贝

标签:python   深拷贝与浅拷贝   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!