- 切片复制:
a = [[1, 2], {'key': 'value'}]
b = a[:]
b[0][0] = 10
print(a)
- 输出结果:
[[10, 2], {'key': 'value'}]
- 原因解释:切片复制是浅拷贝,它只复制了外层列表,而内层的列表和字典等复杂数据结构仍然是引用。所以当修改
b
中内层列表的元素时,a
中的内层列表也会跟着改变,因为它们指向同一个内存地址。
copy
模块的copy
方法(浅拷贝):
import copy
a = [[1, 2], {'key': 'value'}]
b = copy.copy(a)
b[0][0] = 10
print(a)
- 输出结果:
[[10, 2], {'key': 'value'}]
- 原因解释:
copy.copy
也是浅拷贝,同样只复制了外层列表,内层的复杂数据结构是引用。所以修改b
中内层列表的元素,a
中内层列表也会改变。
copy
模块的deepcopy
方法(深拷贝):
import copy
a = [[1, 2], {'key': 'value'}]
b = copy.deepcopy(a)
b[0][0] = 10
print(a)
- 输出结果:
[[1, 2], {'key': 'value'}]
- 原因解释:
copy.deepcopy
是深拷贝,它会递归地复制所有层次的嵌套数据结构。所以b
和a
是完全独立的,修改b
中内层列表的元素不会影响到a
。