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

二维数组填充异常:修改单个元素触发整列值变更的原因及修复

问题成因与修复方案

问题成因

你用c = [[0] * k] * n创建二维数组的方式存在本质问题——Python并没有生成n个独立的长度为k的列表,而是把同一个列表对象重复引用了n次。换句话说,c[0]、c[1]……c[n-1]指向的是内存里的同一个列表。就像你复制了n把开同一个箱子的钥匙,不管用哪把钥匙改箱子里的东西,所有钥匙打开的箱子内容都会同步变化。所以修改c[i][b]时,本质是修改了这个共享列表的第b个元素,所有行的同列元素自然会跟着变更。

修复方法

把二维数组的创建代码换成列表推导式,让每一行都生成一个独立的新列表:

c = [[0] * k for _ in range(n)]

直接替换原来的c = [[0] * k] * n这一行即可。

修复原理

列表推导式会循环执行n次,每次都会生成一个全新的[0] * k列表。这样c里的每一行都是内存中的独立对象,修改某一行的某列元素时,只会影响当前行的对应位置,其他行的同列元素不会再同步变动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:56:01