copy
Python
浅拷贝和深拷贝
在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用于复制对象的两种方式,主要区别在于对嵌套对象的处理方式不同:
浅拷贝(Shallow Copy)
- 定义:只复制对象本身,而不复制对象内部的嵌套对象,新对象与原对象共享嵌套对象的引用。
- 特点:
- 顶层对象是新的,但嵌套对象仍是原对象中嵌套对象的引用
- 修改新对象中的嵌套对象会影响原对象,反之亦然
- 实现方式:
- 使用切片操作
list[:]
- 使用
copy()
方法(如列表、字典) - 使用
copy.copy()
函数
- 使用切片操作
示例:
import copy
= [1, 2, [3, 4]]
original = copy.copy(original)
shallow
0] = 100 # 只修改顶层元素,不影响原对象
shallow[2][0] = 300 # 修改嵌套列表,原对象也会受影响
shallow[
print(original) # [1, 2, [300, 4]]
print(shallow) # [100, 2, [300, 4]]
深拷贝(Deep Copy)
- 定义:完全复制对象及其内部的所有嵌套对象,新对象与原对象完全独立,没有任何共享引用。
- 特点:
- 顶层对象和所有嵌套对象都是全新的
- 修改新对象不会影响原对象,两者完全隔离
- 实现方式:
- 使用
copy.deepcopy()
函数
- 使用
示例:
import copy
= [1, 2, [3, 4]]
original = copy.deepcopy(original)
deep
0] = 100 # 修改顶层元素,不影响原对象
deep[2][0] = 300 # 修改嵌套列表,原对象不受影响
deep[
print(original) # [1, 2, [3, 4]]
print(deep) # [100, 2, [300, 4]]
总结
- 当对象没有嵌套结构时,浅拷贝和深拷贝效果相同
- 当对象包含嵌套结构(如列表中的列表、字典中的列表等)时:
- 浅拷贝适合只需独立修改顶层元素的场景
- 深拷贝适合需要完全隔离原对象和复制对象的场景(如处理复杂数据结构)
- 深拷贝的开销通常比浅拷贝大,因为需要递归复制所有嵌套对象