为什么访问数组中的一个元素与访问python中的所有其他行一起工作?

为什么访问数组中的一个元素与访问python中的所有其他行一起工作?,python,Python,我当时正在研究Colab,我必须将csv转换为2d阵列 但我以前从未使用过python(我是C用户),所以我不擅长python列表 real = [1, 2] copy = [[0] * 2] * 4 print(copy) for j in range(1): for i in range(2): copy[i][j] = real[i] print(copy) 我预料 [[0, 0], [0, 0], [0, 0], [0, 0]] [[1, 0

我当时正在研究Colab,我必须将csv转换为2d阵列

但我以前从未使用过python(我是C用户),所以我不擅长python列表

real = [1, 2]
copy = [[0] * 2] * 4

print(copy)

for j in range(1):
    for i in range(2):
        copy[i][j] = real[i]
        print(copy)
我预料

[[0, 0], [0, 0], [0, 0], [0, 0]]
[[1, 0], [0, 0], [0, 0], [0, 0]]
[[1, 0], [2, 0], [0, 0], [0, 0]]
但它是这样工作的

[[0, 0], [0, 0], [0, 0], [0, 0]]
[[1, 0], [1, 0], [1, 0], [1, 0]]
[[2, 0], [2, 0], [2, 0], [2, 0]]

请帮助我…

这是一个常见错误,由python中名为
浅列表的东西引起。可以通过在此方法中声明2D数组来消除此错误

real = [1, 2]
rows, cols = (4, 2)
copy = [[0 for i in range(cols)] for j in range(rows)]
print(copy)
for j in range(1):
   for i in range(2):
      copy[i][j] = real[i]
      print(copy)