Python 基础知识:深拷贝与浅拷贝
作者:野牛程序员:2025-12-22 10:32:21python阅读 2019
Python 基础知识:深拷贝与浅拷贝
# /*
# Python 基础知识:深拷贝与浅拷贝
# --------------------------------------------------------
# 功能:
# 1) 展示浅拷贝 copy() 的复制方式
# 2) 展示深拷贝 deepcopy() 对嵌套结构的完整复制
# 3) 对比二者对可变对象的影响
# */
import copy
print("示例一:浅拷贝的基本行为")
lst1 = [1, 2, [10, 20]]
lst2 = lst1.copy() # 浅拷贝
print("原始列表:", lst1)
print("浅拷贝:", lst2)
lst2[0] = 99 # 修改第一层元素
lst2[2].append(30) # 修改嵌套列表
print("修改后的原始列表:", lst1)
print("修改后的浅拷贝:", lst2)
print("-" * 40)
print("示例二:深拷贝避免共享嵌套对象")
lst3 = [1, 2, [10, 20]]
lst4 = copy.deepcopy(lst3)
print("原始列表:", lst3)
print("深拷贝:", lst4)
lst4[2].append(30) # 修改深拷贝中的嵌套列表
print("修改后的原始列表:", lst3)
print("修改后的深拷贝:", lst4)
print("-" * 40)
print("示例三:浅拷贝与深拷贝的内存引用对比")
a = [[1], [2], [3]]
shallow = a.copy()
deep = copy.deepcopy(a)
print("浅拷贝引用对比:", a[0] is shallow[0])
print("深拷贝引用对比:", a[0] is deep[0])
# /*
# 输出示例(简化版):
# 示例一(浅拷贝):
# 原始列表: [1, 2, [10, 20]]
# 浅拷贝: [1, 2, [10, 20]]
# 修改后的原始列表: [1, 2, [10, 20, 30]]
# 修改后的浅拷贝: [99, 2, [10, 20, 30]]
# ----------------------------------------
# 示例二(深拷贝):
# 原始列表: [1, 2, [10, 20]]
# 深拷贝: [1, 2, [10, 20]]
# 修改后的原始列表: [1, 2, [10, 20]]
# 修改后的深拷贝: [1, 2, [10, 20, 30]]
# ----------------------------------------
# 示例三(引用对比):
# 浅拷贝引用对比: True
# 深拷贝引用对比: False
#
# 要点总结:
# 1) 浅拷贝只复制最外层结构,对内部嵌套对象仍为共享引用;
# 2) 深拷贝会递归复制所有层级的对象,完全隔离;
# 3) 可变嵌套结构是浅拷贝问题的主要来源;
# 4) 普通列表、字典若无嵌套结构,浅拷贝通常足够安全;
# 5) 嵌套层级复杂的数据结构使用 deepcopy 更稳妥;
# 6) 使用 is 可检查两个对象是否共享引用。
# */野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

