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

Python二维数组赋值异常:为何a与b输出结果不一致?

问题出在二维列表的创建方式!

你遇到的这个坑其实是Python里创建嵌套列表时非常常见的误区,咱们一步步拆解来搞明白:

首先看你初始化a的代码:

a = [[0]*2]*2

这行代码看起来是生成了一个2×2的列表,但实际上它只创建了一个内部列表[0,0],然后把这个列表的引用重复了两次放到外层列表里。换句话说,a[0]和a[1]指向的是同一个列表对象——你可以自己加一行print(a[0] is a[1])验证,输出肯定是True。

接下来看你的赋值循环:

for i in range(2):
    for j in range(2):
        a[i][j] = b[i][j]

咱们一步步模拟执行过程:

  1. 当i=0, j=0:把b[0][0]的1赋值给a[0][0],因为a[0]和a[1]是同一个列表,此时a直接变成[[1,0], [1,0]]
  2. 当i=0, j=1:把b[0][1]的1赋值给a[0][1],这时a变成[[1,1], [1,1]]
  3. 当i=1, j=0:把b[1][0]的1赋值给a[1][0],但这个位置本来就是1,没变化
  4. 当i=1, j=1:把b[1][1]的0赋值给a[1][1],因为两个子列表是同一个,所以a[0][1]也会被改成0!最终a就变成了[[1,0], [1,0]]

至于你提到输出里b变成了[[1,0],[1,0]],这大概率是笔误——你的代码里只对a做赋值操作,完全没修改b,正常情况下b应该保持初始的[[1,1],[1,0]]才对。

怎么解决?

要创建真正独立的二维列表,得确保每个内部列表都是全新的对象,推荐用列表推导式:

a = [[0]*2 for _ in range(2)]

或者更直观的写法:

a = [[0 for _ in range(2)] for _ in range(2)]

这样a[0]和a[1]就是两个完全独立的列表,再执行你的赋值循环,a就会和b完全一致了。

内容的提问来源于stack exchange,提问作者Victor. L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:38:42