在Python中,赋值、浅拷贝和深拷贝的主要区别在于对对象的复制深度和内存引用方式。以下是详细对比:
pythona = [1, [2, 3]]
b = a # 赋值操作
a.append(4) # 修改原对象
print(b) # 输出:[1, [2, 3], 4](b同步变化)
pythonimport copy
a = [1, [2, 3]]
b = copy.copy(a) # 浅拷贝
a.append(4) # 修改顶层元素
a[1].append(5) # 修改嵌套元素
print(a) # 输出:[1, [2, 3, 5], 4]
print(b) # 输出:[1, [2, 3, 5]](嵌套元素同步变化,顶层不变化)
pythonimport copy
a = [1, [2, 3]]
b = copy.deepcopy(a) # 深拷贝
a.append(4) # 修改顶层元素
a[1].append(5) # 修改嵌套元素
print(a) # 输出:[1, [2, 3, 5], 4]
print(b) # 输出:[1, [2, 3]](完全独立,无变化)
pythonimport copy
# 原对象
original = [1, [2, 3]]
# 赋值
assigned = original
# 浅拷贝
shallow = copy.copy(original)
# 深拷贝
deep = copy.deepcopy(original)
# 修改原对象的顶层和嵌套元素
original.append(4)
original[1].append(5)
print("原对象:", original) # [1, [2, 3, 5], 4]
print("赋值结果:", assigned) # [1, [2, 3, 5], 4]
print("浅拷贝结果:", shallow) # [1, [2, 3, 5]]
print("深拷贝结果:", deep) # [1, [2, 3]]
结果验证:
赋值对象完全同步变化。
浅拷贝的嵌套列表同步变化,但顶层元素独立。
深拷贝完全不受影响。
本文作者:赵耀伟
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!