sdhgf 发表于 2015-7-20 09:35:33

python深拷贝与浅拷贝

浅拷贝:b=copy.copy(a),对引用的拷贝,只拷贝父对象,所以id(b)不等于id(a),但对象内部资源依然引用,内部id(b)等于id(a),id(b)等于id(a)
深拷贝:c=copy.deepcopy(a),对对象资源的拷贝,id(c)不等于id(a),内部id(c)等于id(a),id(c)不等于id(a)

注意:因为数字是不可变量,所以数字的id不变,无论深拷贝还是浅拷贝,id(b)、id(c)都等于id(a);列表是可变变量,所以列表的id如果是深拷贝会变,id(c)不等于id(a)

参考代码如下:

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=]
>>> id(a)
33174592
>>> id(a)
33542860
>>> id(a)
44499872
>>> id(a)
33542812
>>> b=a
>>> id(b)
33174592
>>> id(b)
33542860
>>> id(b)
44499872
>>> id(b)
33542812
>>> b=copy.copy(a)
>>> id(b)
38384984
>>> id(b)
33542860
>>> id(b)
44499872
>>> id(b)
33542812
>>> b=44
>>> b
]
>>> a
]
>>> b=9
>>> b
]
>>> a
]
>>> id(a)
33174592
>>> id(a)
44499872
>>> id(a)
33542332
>>> c=copy.deepcopy(a)
>>> c
]
>>> id(c)
44501232
>>> id(c)
44500912
>>> id(c)
33542332
>>> id(a)
33542860
>>> id(c)
33542860
>>> a
]
>>> c
]
>>> c=444
>>> c
]
>>> a
]
>>>



页: [1]
查看完整版本: python深拷贝与浅拷贝