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

浅复制只建立外层容器
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






