You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当列表存放同一个类的多个相同实例时,deepcopy的执行行为是怎样的?

Python deepcopy对列表中重复实例引用的处理逻辑

结论

Python 标准库的copy.deepcopy()仅会为同一个原始类实例创建1份新的副本实例,后续遍历到其他指向该原始实例的引用时,会直接复用已生成的新副本赋值,不会重复创建新实例。

实现原理

deepcopy 内部维护了一个名为memo的字典映射,用于记录已经完成拷贝的「原始对象内存地址」和「对应新生成的副本对象」的对应关系。每次执行拷贝操作前,都会先查询memo字典,如果待拷贝的原始对象已经存在映射记录,会直接返回已生成的副本对象,跳过拷贝逻辑。

验证代码

你可以通过以下代码自行验证该行为:

import copy

class TestClass:
    pass

# 构造含重复引用的原始列表
origin_obj = TestClass()
origin_list = [origin_obj, origin_obj]

# 打印原列表两个元素的内存地址,确认指向同一个实例
print(f"原列表两个元素id是否相同:{id(origin_list[0]) == id(origin_list[1])}")

# 执行深拷贝
copied_list = copy.deepcopy(origin_list)

# 验证拷贝后列表的引用关系
print(f"拷贝后列表两个元素id是否相同:{id(copied_list[0]) == id(copied_list[1])}")
print(f"拷贝后实例与原实例id是否不同:{id(copied_list[0]) != id(origin_obj)}")

运行输出

原列表两个元素id是否相同:True
拷贝后列表两个元素id是否相同:True
拷贝后实例与原实例id是否不同:True

输出结果可以证明:深拷贝后的列表仍然保留了和原列表一致的重复引用关系,仅生成了1份新的类实例。

内容的提问来源于stack exchange,提问作者user10725691

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 10:57:03