在Python中,拷贝分为浅拷贝(shallow copy)和深拷贝(deep copy)。它们的主要区别在于拷贝对象内部的子对象的处理方式。
- 浅拷贝:创建一个新的对象,但只拷贝原对象的引用,而不是拷贝内部的子对象。这意味着,如果原对象的子对象发生变化,拷贝后的对象也会受到影响。在Python中,可以使用copy模块的copy()函数实现浅拷贝。例如:
import copy
original_list = [1, 2, [3, 4]]
shallow_copy_list = copy.copy(original_list)
original_list[2][0] = 99
print(shallow_copy_list)
输出:
[1, 2, [99, 4]]
可以看到,修改原对象的子对象后,浅拷贝的对象也受到了影响。
- 深拷贝:创建一个新的对象,并递归地拷贝原对象的所有子对象。这意味着,即使原对象的子对象发生变化,拷贝后的对象也不会受到影响。在Python中,可以使用copy模块的deepcopy()函数实现深拷贝。例如:
import copy
original_list = [1, 2, [3, 4]]
deep_copy_list = copy.deepcopy(original_list)
original_list[2][0] = 99
print(deep_copy_list)
输出:
[1, 2, [3, 4]]
可以看到,修改原对象的子对象后,深拷贝的对象没有受到影响。
总之,浅拷贝只拷贝对象的引用,而深拷贝会递归地拷贝对象的所有子对象。在处理包含可变子对象(如列表、字典)的对象时,需要根据实际需求选择使用浅拷贝还是深拷贝。