Python中列表拷贝后修改新列表为何会改动原列表?
问题根源
你使用的.copy()、list(originList)、originList[:]都属于浅拷贝,仅会复制列表的最外层容器,内层嵌套的子列表仍然和原列表共享同一内存引用。你修改newList[y][z]时实际操作的是共享的子列表对象,因此原列表也会同步变更。
解决方案
方案1:手动嵌套拷贝(适合二维等简单嵌套结构)
直接在拷贝外层列表时,同时拷贝每个内层子列表,替换原有拷贝逻辑即可:
# 替换原newList = originList.copy() newList = [row.copy() for row in originList]
方案2:使用深拷贝工具(适合任意层数的嵌套结构)
调用Python标准库copy提供的deepcopy方法,会递归拷贝所有层级的嵌套对象:
import copy # 替换原newList = originList.copy() newList = copy.deepcopy(originList)
两种方案任选其一即可实现仅修改新列表、原列表保持不变的需求,对Python3.9.6版本完全兼容。
内容的提问来源于stack exchange,提问作者SantiClaw
相关产品推荐
相关产品推荐

