浅拷贝: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
原文地址:http://zhzhgo.blog.51cto.com/10497096/1675845