1. 赋值(=)
只是创建新名字,指向同一个对象
修改任意一方,另一方都会跟着变
a = [1, 2, 3]
b = a # 赋值
b[0] = 99
print(a) # [99, 2, 3]
print(b) # [99, 2, 3]
print(a is b) # True
2. 浅拷贝(copy.copy()
)
新建外层容器,但里面的子对象仍然共享引用
修改子对象内部 → 会影响原对象
替换整个子对象 → 脱钩,不影响原对象
示例 1:修改子元素(会影响)
import copy
a = [[1, 2, 3], [3, 4, 5]]
b = copy.copy(a)
b[0][0] = 99
print(a) # [[99, 2, 3], [3, 4, 5]]
print(b) # [[99, 2, 3], [3, 4, 5]]
示例 1:替换整个子列表(不会影响)
a = [[1, 2, 3], [3, 4, 5]]
b = copy.copy(a)
b[0] = [99, 98, 97]
print(a) # [[1, 2, 3], [3, 4, 5]]
print(b) # [[99, 98, 97], [3, 4, 5]]
3. 深拷贝(copy.deepcopy()
)
递归地复制所有层次对象
完全独立,互不影响
import copy
a = [[1, 2, 3], [3, 4, 5]]
b = copy.deepcopy(a)
b[0][0] = 99
print(a) # [[1, 2, 3], [3, 4, 5]]
print(b) # [[99, 2, 3], [3, 4, 5]]