can';t在python中正确修改全局二维矩阵

can';t在python中正确修改全局二维矩阵,python,python-3.x,Python,Python 3.x,我在尝试一个程序,在该程序中,我用python全局声明了一个名为grid的2D数组,大小为5 x 5 grid = [[0] * 5] * 5 def main(): global grid n,m = map(int,input().split()) for i in range(n): li = list(map(int,input().split())) for j in range(m): if j <

我在尝试一个程序,在该程序中,我用python全局声明了一个名为
grid
的2D数组,大小为5 x 5

grid = [[0] * 5] * 5

def main():
    global grid
    n,m = map(int,input().split())
    for i in range(n):
        li = list(map(int,input().split()))
        for j in range(m):
            if j < 5:
                grid[i][j] = li[j]
    print(grid)

if __name__ == "__main__":
    main()
2行3列(
n
m

它给出以下输出:-

[[4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0], [4, 5, 6, 0, 0]]
即使从
main
函数中删除行
global grid
,输出仍保持不变。发生了什么事?我希望它根据输入更新网格,并保留多余的单元格不变,即值
0
。如果输入的大小为2 x 3,则仅应根据输入修改
网格的前2行和3列,其余元素应保持
0
,您应使用:

[[0]*5 for _ in range(5)]
而不是:

[[0] * 5] * 5

有关更多信息,请检查此项。

有没有比此更快的方法?我在1D列表中使用了这个方法,因为它比列表理解速度快,而且效果总是很好。我认为这是最快的方法。。。检查
[[0] * 5] * 5