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

Python列表浅拷贝问题:追加副本修改原列表后另一列表同步变更原因

问题形成原因

该问题本质是Python中浅拷贝的特性导致的:

  • Python列表的copy()方法(以及切片操作k[:])都属于浅拷贝,对于嵌套结构的列表(即此处的二维列表),浅拷贝只会创建一个新的外层列表容器,新列表里存储的还是原列表内部子列表的引用,并不会复制子列表本身。
  • 执行a.append(k.copy())时,仅把k的外层列表复制了一份存入a,a中存储的这个外层列表里的9个子列表,和原k变量的9个子列表指向完全相同的内存对象。因此后续修改k[i][j]的值时,本质修改的是共享的子列表对象,a中对应的数据自然会同步变化。
可行解决方案

针对该场景,常见的解决方案有两种:

  • 方案1:使用标准库的深拷贝方法(通用所有嵌套层级)
    导入copy模块的deepcopy方法,深拷贝会递归复制所有层级的嵌套对象,完全不共享原对象的引用:
    import copy
    # 把原来的a.append(k.copy())改成下面的代码
    a.append(copy.deepcopy(k))
    
  • 方案2:手动生成二维列表的全量拷贝(仅适用于二维列表,性能更优)
    用列表推导式给每一层子列表都做一次浅拷贝,即可实现二维列表的完全复制,不需要额外导入模块,性能比深拷贝更高:
    # 把原来的a.append(k.copy())改成下面的代码
    a.append([row.copy() for row in k])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:00