在 Python 中,浅拷贝和深拷贝是两种不同的拷贝方式,用来复制对象。它们的区别主要体现在是否递归复制对象内部的子对象。
import copy
#原始列表
original_list = [1,2,3,[4,5,['T','E','S','T']]]
#原始列表直接赋值给新的列表
new_list = original_list
#浅拷贝
shallow_copied_list = original_list .copy()
#深拷贝
deep_copied_list = copy.deepcopy(original_list )
1. 浅拷贝 (shallow copy)
浅拷贝只复制对象本身,而不会递归复制它包含的子对象。换句话说,浅拷贝的新对象和原对象共享子对象的引用。
外层对象:original_list
和 shallow_copied_list
是两个独立的对象。
内层对象(嵌套列表):它们共享同一个引用。当修改 shallow_copied_list
中的嵌套列表元素时,original_list
中的嵌套列表也会改变。
两个列表的外层是不同的对象,但它们的嵌套列表是同一个对象。
修改原始列表里的值:
import copy
original_list = [1,2,3,[4,5,['T','E','S','T']]]
new_list = original_list
shallow_copied_list = original_list.copy()
deep_copied_list = copy.deepcopy(original_list)
original_list[1] = 999
original_list[3][1] = 999
2. 深拷贝 (deep copy)
深拷贝会递归地复制对象本身以及它包含的所有子对象,因此新对象和原对象完全独立。
外层对象:original_list
和 deep_copied_list
是独立的对象。
内层对象(嵌套列表):deep_copied_list
中的嵌套列表是原对象的深拷贝,因此两者互不影响。
总结:
浅拷贝:只复制最外层的对象,内层对象引用共享。
深拷贝:递归复制所有层级的对象,每个对象都是独立的。