使用"[[0]*x]*y"在Python中初始化矩阵会创建链接的行?

Zaz*_*Zaz 3 python matrix

初始化矩阵似乎链接行,以便当一行更改时,它们都会更改:

>>> grid = [[0]*5]*5
>>> grid
[[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]]
>>> grid[2][2] = 1
>>> grid
[[0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?

rob*_*ing 8

grid = [[0]*5 for i in range(5)]
Run Code Online (Sandbox Code Playgroud)

注意:[int]*5将int复制5次(但是复制int时只需复制值).[list]*5将对同一列表的引用复制5次.(复制列表时,复制指向内存中列表的引用).