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

Python中修改嵌套列表的copy()副本为何会同步影响其他副本?

异常原因

问题出在Python列表的copy()是浅拷贝:它只会复制最外层的列表对象,不会复制内层嵌套的子列表,你生成的coords、distances和原grid共享同一套内层行列表。
具体逻辑:

  • 你通过np.empty((10,0)).tolist()得到的grid,是一个外层长度为10的列表,里面装了10个空列表作为二维网格的行。
  • 调用.copy()时,只是给coords和distances新建了独立的外层列表壳,但壳子里存的10个行列表的内存地址,和原grid里存的行地址完全一样——换句话说grid[i]、coords[i]、distances[i]三个变量指向的是同一个列表对象。
  • 你在循环里交替往distances[i]追加距离值、往coords[i]追加坐标,本质是往同一个列表里先后塞两种数据,最后每个行列表里都混了距离和坐标,所以不管打印哪个变量,出来的都是数字和坐标对交替出现的错误结果。

你之前打印三个变量的id发现地址不同,只能证明三个外层列表是独立对象,说明不了内层子列表的关系。你可以打印id(grid[0])、id(coords[0])、id(distances[0])验证,这三个地址是完全相同的。

修正方案

不用从同一个grid做浅拷贝派生两个列表,直接分别初始化两个独立的嵌套空列表就行:

import numpy as np
coords = [[] for _ in range(10)]
distances = [[] for _ in range(10)]

for i in range(10):
    for j in range(10):
        distances[i].append(i+j)
        coords[i].append([i, j])
print(distances)
print(coords)

如果一定要用拷贝实现,需要用标准库的copy.deepcopy()做深拷贝,但这个场景下直接初始化更简单,性能也更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:01:20