当前位置:首页python > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • Python 基础知识:深拷贝与浅拷贝
  • 相关推荐

    最新推荐

    热门点击