🐍 Python 列表赋值 & 拷贝总结

🐍 Python 列表赋值 & 拷贝总结

1. 赋值(=)

  • 只是创建新名字,指向同一个对象

  • 修改任意一方,另一方都会跟着变

1
2
3
4
5
6
7
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:修改子元素(会影响)

1
2
3
4
5
6
7
8
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:替换整个子列表(不会影响)

1
2
3
4
5
6
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()

  • 递归地复制所有层次对象

  • 完全独立,互不影响

1
2
3
4
5
6
7
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]]