python赋值、浅拷贝和深拷贝的区别
在Python中,赋值(=
)、浅拷贝(copy.copy()
)和深拷贝(copy.deepcopy()
)三者之间的主要区别在于它们如何复制对象。
赋值:将一个变量指向另一个对象,新的变量只是旧的变量的别名
浅拷贝:创建一个新的对象,新对象的属性和原对象相同,但是属性内部的引用还是指向源对象内部的引用(只拷贝父对象,不拷贝子对象)
深拷贝:创建一个新的对象,新对象的属性和原对象相同,且属性内部的引用也指向新对象。(递归拷贝)
import copy
# 原始对象
original = [1, 2, [3, 4]]
# 赋值
assigned = original
# 浅拷贝
shallow_copy = copy.copy(original)
# 深拷贝
deep_copy = copy.deepcopy(original)
# 修改原始对象
original.append(5)
original[2].append(5)
# 输出结果
print("Original:", original) # [1, 2, [3, 4, 5], 5]
print("Assigned:", assigned) # [1, 2, [3, 4, 5], 5]
print("Shallow Copy:", shallow_copy) # [1, 2, [3, 4, 5]]
print("Deep Copy:", deep_copy) # [1, 2, [3, 4]]