深浅copy

 1 # copy
 2 # 在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。
 3 # 赋值: 不会产生新对象,与拷贝没关系。
 4 # 浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制
 5 # 深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
 6 l1 = [1, 2, 3]
 7 l2 = l1.copy()
 8 print(l1, l2)
 9 print(id(l1), id(l2))
10 l2.append('a')
11 print(l1, l2)
12 l1 = [1, 2, [4, 5, 6], 3]
13 l2 = l1.copy()
14 print(l1, id(l1))
15 print(l2, id(l2))
16 l1.append('a')
17 print(l1, l2)
18 l1[2].append('a')
19 print(l1, l2)
20 print(id(l1[2]))
21 print(id(l2[2]))
22 
23 # 深copy
24 import copy
25 l1 = [1, 2, [4, 5, 6], 3]
26 l2 = copy.deepcopy(l1)
27 print(l1, id(l1))
28 print(l2, id(l2))
29 l1[2].append('a')
30 print(l1, l2)
31 
32 # 浅copy
33 l1 = [1, [1], 2, 3, 4]
34 l2 = l1[:]
35 l1[1].append('a')
36 print(l1, l2)

 

posted @ 2018-09-03 23:23  写bug的日子  阅读(110)  评论(0编辑  收藏  举报