深拷贝,浅拷贝

拷贝:在内存中复制一个对象,与引用不同

 1 a = [1,2]
 2 b = a#b和a内存地址相同,ab都只是列表对象[1,2]的引用,这个赋值操作并没有复制对象
 3 c = list[a]#c的内存地址就不同于a了,这是对象的复制
 4 d = a[:]#d的内存地址也不同于a,也是对象的复制
 5 #而list和切片复制都是浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。
 6 
 7 
 8 
 9 e = [1,[2,3]]
10 f = list[e]
11 id(e)
12 id(f)#不同于e的地址
13 id(e[1])
14 id(f[1])#与上条地址相同,所以,改变f[1],e[1]也会跟着变化,例如f[1][1] = 5,那么e[1][1]也讲变为5

 有没有一种方法,可以完全的拷贝对象呢?这叫做深拷贝

1 a =[1,[2,3]]
2 import copy
3 b =copy.deepcopy(a)
4 id(a[1])
5 id(b[1])#地址不同了跟上面的

 

posted @ 2018-01-26 17:56  扫驴  阅读(133)  评论(0编辑  收藏  举报