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

5×5输入转二维数组遇异常:修改arr[0][0]致同列元素同步变更求助

问题:5×5输入转二维数组时同列元素同步变化

我要把5×5的输入转换成二维数组,写完代码后输出结果不符合预期。发现修改arr[0][0]的值时,arr[1][0]、arr[2][0]等同列元素都会跟着变,不知道问题出在哪。

我的代码如下:

side = 5
L = []
a = []
arr=[[0]*side]*side
for o in range(5):
    i = input()
    a.append(i)
d = 0
for i in a:
    c = 0
    for b in i:
        L.append(b)
        arr[d][c] = L.pop(0)
        c += 1
    d += 1
print(arr)

问题根源

问题出在二维数组的创建方式:arr=[[0]*side]*side。这行代码里,[[0]*side]创建了一个列表,然后*side是把这个列表的引用复制了side次。也就是说,数组里的每一行其实都是同一个列表对象,修改任意一行的某个元素,其他行对应位置的元素都会同步变化——因为它们指向的是同一个内存地址。

解决方法

把二维数组的创建方式改成列表推导式,这样每一行都是独立的新列表:

arr = [[0]*side for _ in range(side)]

另外,你的代码可以简化,不需要额外的L列表,直接遍历输入的每个字符赋值即可:

side = 5
arr = [[0]*side for _ in range(side)]
for d in range(side):
    line = input().strip()
    for c in range(side):
        arr[d][c] = line[c]
print(arr)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:44:52