Python开发【第二章】:深浅拷贝剖析

 1 #-----python的赋值,浅copy,深copy-----
 2 #总结:直接赋值即引用,没有拷贝;浅拷贝,浅层拷贝,深层引用;深拷贝,整体拷贝,没有引用。
 3 
 4 #1.直接赋值,传递对象的引用,原始列表改变,被赋值的也会做出相同的改变。
 5 
 6 list_1 = [1,2,3,4,['m','t']]
 7 list_2 = list_1
 8 print(id(list_1),id(list_2))
 9 #输出:35493192 35493192
10 
11 list_1.append(5)
12 print(list_1,id(list_1))
13 print(list_2,id(list_2))
14 #输出:
15 # [1, 2, 3, 4, ['m', 't'], 5] 35362120
16 # [1, 2, 3, 4, ['m', 't'], 5] 35362120
17 
18 #2.浅copy:没有拷贝子对象,所以原始数据改变,子对象会改变
19 import copy
20 list_3 = copy.copy(list_1)
21 print(list_1,id(list_1))
22 print(list_3,id(list_3))
23 #输出:
24 # [1, 2, 3, 4, ['m', 't']] 37524808
25 # [1, 2, 3, 4, ['m', 't']] 37780424
26 
27 list_1[2] = 'zz'
28 print(list_1,id(list_1))
29 print(list_3,id(list_3))
30 #输出:
31 # [1, 2, 'zz', 4, ['m', 't']] 35558728
32 # [1, 2, 3, 4, ['m', 't']] 37977032
33 
34 list_1[4][0] = 'hh'
35 print(list_1,id(list_1))
36 print(list_3,id(list_3))
37 #输出:
38 # [1, 2, 3, 4, ['hh', 't']] 31954248
39 # [1, 2, 3, 4, ['hh', 't']] 32209864
40 
41 #3.深copy:对象里面的子对象也拷贝了,所以原始对象的改变不会造成深拷贝里任何元素的改变
42 import copy
43 list_4 = copy.deepcopy(list_1)
44 print(list_1,id(list_1))
45 print(list_4,id(list_4))
46 #输出:
47 # [1, 2, 3, 4, ['m', 't']] 35362120
48 # [1, 2, 3, 4, ['m', 't']] 37977032
49 
50 list_1[2] = 'zz'
51 print(list_1,id(list_1))
52 print(list_4,id(list_4))
53 #输出:
54 # [1, 2, 'zz', 4, ['m', 't']] 35427656
55 # [1, 2, 3, 4, ['m', 't']] 35683272
56 
57 list_1[4][0] = 'hh'
58 print(list_1,id(list_1))
59 print(list_4,id(list_4))
60 #输出:
61 # [1, 2, 3, 4, ['hh', 't']] 35624264
62 # [1, 2, 3, 4, ['m', 't']] 35879880
原文地址:https://www.cnblogs.com/mumupa0824/p/8527925.html