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

Python返回二维数组时所有行重复为最后一行的问题排查

问题根因

这是Python使用乘法创建嵌套列表时的典型浅拷贝引用问题:

  • 代码中初始化二维数组的写法T = [[0.0]*cols]*rows存在逻辑缺陷:外层的*rows操作不会生成rows个独立的子列表,只是把同一个子列表的内存地址复制了rows份。也就是说T[0]到T[rows-1]的所有行索引,指向的都是内存里完全相同的一个列表对象,修改任意一行的元素,所有行的对应位置都会同步改变。
  • 函数内赋值时逐元素打印结果正确,是因为循环按i从0到size-1顺序执行,给T[i][j]赋值后立刻打印当前值,此时刚写入的内容还没被后续循环覆盖,所以输出暂时正确。但i自增进入下一行赋值时,操作的还是那个共享的子列表,会直接把上一轮写入的前一行数据全部覆盖。
  • 整个双重循环结束后,共享子列表里只保留了最后一轮i=size-1写入的最后一行数据,此时无论访问T的哪一个行索引,拿到的都是这份存了最后一行内容的列表,最终打印出来所有行就全是重复的最后一行。
修复方案

将嵌套乘法的初始化逻辑替换为列表推导式,保证每一行都是独立创建的新列表即可:

# 替换原有 T = [[0.0]*cols]*rows 写法
T = [[0.0 for _ in range(cols)] for _ in range(rows)]

补充说明:内层的[0.0]*cols写法是安全的,因为0.0是不可变数值类型,复制不存在引用共享问题,问题仅出在外层对可变列表对象做乘法复制的操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:09:26