|
浅拷贝: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])
参考代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| >>> 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]]
>>>
|
|
|