# 1.赋值(引用) 并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,
# 所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。
# 2. 浅拷贝: 拷贝父对象,不会拷贝对象的内部的子对象。只拷贝浅层的对象
# 3. 深拷贝: copy 模块的 deepcopy 方法
# 将被复制对象完全再复制一遍作为独立的新个体单独存在。
# 所以改变原有被复制对象不会对已经复制出来的新对象产生影响。
import copy
a = [1,2,[3,4]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[2].append(5)
# c[2].remove(5)
print(a)
print(b)
print(c)
print(d)
输出:
[1, 2, [3, 4, 5], 5]
[1, 2, [3, 4, 5], 5]
[1, 2, [3, 4, 5]]
[1, 2, [3, 4]]
##解析
- b=a 赋值,a和b都指向同一个对象
* b=a.copy() 浅拷贝:a和b都是独立的对象,但他们的子对象还是指向统一对象(是引用)
* b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的.
非常好的参考资料:
https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.htmlhttps://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html