为什么这个二维数组每次循环产生的数都一样(语言-python)


import random
m=[[0]*5]*4
for i in range(4):
    for j in range(5):
        m[i][j]=random.randint(4,10)
        print(m)

回答如下,记得采纳哦!
初始化列表方式不对
在初始化二维数组m时,使用了重复引用同一个子列表的方式,即将子列表复制四次,然后将这四个引用放在一个列表中。这意味着任何对这四个子列表中的任何一个子列表所做的更改都将反映在所有其他子列表中,因为它们实际上是相同的对象。
因此,在代码的第3行中,虽然使用了[0] * 5的语法创建了一个包含5个零的子列表,但是在将其复制为四个引用的时候,每个引用都指向相同的子列表对象,而不是独立的子列表。这数组的四行也是复制的,同理!
你可以用列表推导式快速初始化列表:

import random

m = [[0 for j in range(5)] for i in range(4)]
for i in range(4):
    for j in range(5):
        m[i][j] = random.randint(4, 10)

print(m)  # 注意这里的缩进,你写的不对