python二维数组。不同的启动得到相同的结果,但是不同的操纵结果

问题描述 投票:0回答:1

这两种二维数组初始化方式之间的主要区别是什么

m1 = [[0]*5]*5
m2 = [[0 for x in range(5)]for y in range(5)]

此代码为我在打印结果时提供了我想要的确切二维数组

print('m1 == m2 ?',m1 == m2)
print('m1',m1)
print('m2',m2)

来自控制台的结果:

m1 == m2 ? True
m1 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
m2 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

但是,当我尝试将其值修改为m[i][0]= i and m[0][j] = j时,如以下代码所示,我得到了两个完全不同的结果

for i in range(5):
    m1[i][0] = i
    m2[i][0] = i

for j in range(5):
    m1[0][j] = j
    m2[0][j] = j

print('m1 == m2 ?',m1 == m2)
print('m1 after',m1)
print('m2 after',m2)

和结果:

m1 == m2 ? False
m1 after [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
m2 after [[0, 1, 2, 3, 4], [1, 0, 0, 0, 0], [2, 0, 0, 0, 0], [3, 0, 0, 0, 0], [4, 0, 0, 0, 0]]

显然,m2是我需要的。使用m1的方法声明2d数组是错误的吗?

python multidimensional-array
1个回答
0
投票

问题是,在[[0]*5]*5中,最外面的列表在所有5个位置都填充有相同的列表。

您应该这样做:

[[0]*5 for y in range(5)]
© www.soinside.com 2019 - 2024. All rights reserved.