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

为何代码中数组a[0][0]至a[0][3]的元素值异常变更?

问题根源与解决方案

你碰到的这个问题其实是Python里创建二维列表时很容易踩的一个坑,核心原因出在二维数组的初始化方式上:

为什么会出现值被覆盖?

你用了a = [[0] * 4] * 2来创建二维数组,但这行代码并没有生成两个独立的长度为4的子列表——它只是把同一个[0,0,0,0]列表的引用复制了两次。也就是说,a[0]和a[1]指向的是内存里的同一个列表对象。

当你的循环执行到j=1时,你给a[1][i]赋值的操作,本质上是在修改那个唯一的子列表,这就会把j=0时给a[0][i]赋的值全部覆盖掉。所以第一次循环输出的是赋值过程中的临时状态,而第二次输出时,子列表已经被最后一次赋值(j=1时的操作)完全覆盖了。

如何修复?

要创建真正独立的二维列表,你需要确保每个子列表都是新的对象,推荐用列表推导式来初始化:

inputBin = list(input("Enter a binary number (max. 8 bits): "))
# 用列表推导式创建两个独立的子列表
a = [[0] * 4 for _ in range(2)]
for j in range(2):
    for i in range(4):
        a[j][i] = int(inputBin[(2 * j) ** 2 + i])
        print("a[",j,"] [",i,"] = ", a[j][i])
for j in range(2):
    for i in range(4):
        print("a[",j,"] [",i,"] = ",a[j][i])

验证结果

当你输入11000011后,两次输出会完全一致:

  • 第一次循环输出:a[0][0]=1、a[0][1]=1、a[0][2]=0、a[0][3]=0,接着a[1][0]=0、a[1][1]=0、a[1][2]=1、a[1][3]=1
  • 第二次循环输出:a[0]的四个值保持1、1、0、0,a[1]的四个值保持0、0、1、1

内容的提问来源于stack exchange,提问作者Thean Jun Chao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:44:04