浅拷贝和深拷贝是处理复杂数据结构(如列表、字典、对象等)时的两种复制方式,核心区别在于是否复制嵌套的数据结构:
只复制最外层的数据,而嵌套的子对象(如列表中的列表、字典中的列表等)不会被复制,而是共享同一份内存地址。
举例:
L = [1, 2, [3, 4]]
a = L.copy() # 浅拷贝
a[0] = 100 # 修改外层元素,不影响原列表
a[2][0] = 300 # 修改嵌套列表的元素,会影响原列表print(L) # 输出 [1, 2, [300, 4]]
完全复制所有层级的数据,包括嵌套的子对象,原对象和副本完全独立,修改任何一方都不会影响另一方。
举例:
import copy # 需要导入copy模块
L = [1, 2, [3, 4]]
b = copy.deepcopy(L) # 深拷贝
b[0] = 100 # 修改外层元素,不影响原列表
b[2][0] = 300 # 修改嵌套列表的元素,也不影响原列表print(L) # 输出 [1, 2, [3, 4]]
- 如果数据结构是单层(如简单列表、字典),浅拷贝和深拷贝效果一样。
- 如果数据结构有嵌套(如列表里包含列表),浅拷贝会共享嵌套部分,深拷贝则完全独立。
需要深拷贝时,要使用 copy
模块的 deepcopy()
方法。