举例 | 类型 | 解释 |
---|---|---|
b = a: | 赋值引用 | a 和 b 都指向同一个对象。 |
b = a.copy()或b=copy.copy(a) | 浅拷贝, | a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 |
b = copy.deepcopy(a): | 深度拷贝, | a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 |
*id()返回对象的内存地址
代码:
a = [1,2,3]
b = a
print(id(a))
print(id(b))
b[0] = 514
print(a)
输出:
2361178739080
2361178739080
[514, 2, 3]
可以看到id(a)==id(b),说明直接赋值时两者指向同一对象。
代码:
import copy
a = [1,2,[3,4]]
b = copy.copy(a)
print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))
b[2][0] = 114
print(a)
print(b)
输出:
2318072588808
2318075078728
2318072853256
2318072853256
[1, 2, [114, 4]]
[1, 2, [114, 4]]
可以看到id(a)!=id(b),但id(a[2])==id(b[2]),说明浅拷贝时a 和 b 是不同对象,但他们的子对象还是指向同一对象。。
代码:
import copy
a = [1,2,[3,4]]
b = copy.deepcopy(a)
print(id(a))
print(id(b))
print(id(a[2]))
print(id(b[2]))
b[2][0] = 114
print(a)
print(b)
输出:
2306280302984
2306282689416
2306280303112
2306282795144
[1, 2, [3, 4]]
[1, 2, [114, 4]]
可以看到id(a)!=id(b),且id(a[2])!=id(b[2]),说明深拷贝时a 和 b 是不同对象,他们的子对象也不是同一对象。