Python复制列表后原数据也变了:检查嵌套对象是否共享

复制一个列表,不一定会复制它内部的每个对象。列表里含有字典或其他列表时,修改嵌套数据可能同时影响原对象,排查时要看引用关系。

表格数据经过整理后成为结构化卡片
浅色主题概念配图,选自本站AI生成图库;非事件现场或产品实测截图。

浅复制只建立外层容器

list.copy生成新的外层列表,但其中的元素仍可能引用原来的字典。下面的例子先修改浅复制中的嵌套字段,原始记录也随之变化。这不是Python随机丢失数据,而是两个容器指向同一个内部对象。

深复制也应有明确目的

copy.deepcopy会递归复制相应对象结构,适合需要独立修改的情况。但不是所有对象都能或都应该这样处理;文件、连接及有特殊行为的对象,需要按其语义管理。复制整个大结构也可能带来额外成本。

先确定哪些部分需要独立

如果只改一个字段,可以构造一份明确的新记录,避免复制无关内容。测试中同时检查修改后的结果和原始输入是否保持预期。本文的小例子只包含普通列表、字典和字符串,不覆盖所有自定义类型。

可以运行的练习

from copy import deepcopy
original = [{"name": "A"}]
shallow = original.copy()
shallow[0]["name"] = "B"
assert original[0]["name"] == "B"
independent = deepcopy(original)
independent[0]["name"] = "C"
assert original[0]["name"] == "B"
print(original, independent)

示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。

资料与继续学习

Python:浅复制与深复制。资料查阅日期:2026年9月26日。步骤与练习由本站整理。

资料查阅与编辑日期:2026年9月26日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享