通八洲科技

Python列表深拷贝浅拷贝区别_copy与deepcopy解析【技巧】

日期:2025-12-29 00:00 / 作者:冷漠man
浅拷贝只复制第一层,嵌套对象仍共享引用;深拷贝递归复制所有层级,彻底隔离嵌套结构;eval(repr(x))模拟深拷贝危险且低效,应优先使用copy.deepcopy()并确认必要性。

浅拷贝只复制第一层,嵌套对象仍共享引用

当你用 copy.copy() 或切片 list[:]list.copy() 复制一个含嵌套列表的 Python 列表时,外层数组是新的,但内部子列表仍是原对象的引用。修改子列表会同步影响原列表。

深拷贝递归复制所有层级,彻底隔离嵌套结构

copy.deepcopy() 会逐层遍历并新建所有可变对象(包括嵌套的 listdictset 等),确保新旧对象完全独立。

不推荐用 eval(repr(x)) 模拟深拷贝

有人用 eval(repr(x)) 尝试“序列化再重建”,这非常危险:

真正需要深拷贝时,优先用 copy.deepcopy(),但先确认是否真有必要

很多场景其实只需浅拷贝——比如临时修改参数、构造中间结果。盲目用 deepcopy 容易掩盖设计问题,还拖慢性能。

嵌套可变对象的生命周期和所有权容易被忽略,这是深浅拷贝问题最常出错的地方。