我创建了一个10 x 10游戏板。它是一个2D列表,内部还有另一个列表2。我用了
board = [[['O', 'O']] * 10 for x in range(1, 11)]。所以会产生类似

['O','O'] ['O','O'] ...

['O','O'] ['O','O'] ...

稍后,我想将单个单元格设置为“ C”,我使用board.gameBoard[animal.y][animal.x][0] = 'C'
board是gameBoard所在的类,而Animal是游戏中的一块,x&y只是整数。有时它将起作用,并且指定的单元格将变为['C','O'],有时,它将用['C','O'] ['C','O'] ['填充整行C','O'] ['C','O']
有谁知道为什么会这样?

最佳答案

基本上,您将创建一堆对同一列表的引用-为了演示,请考虑:

[ [] ]*10


如果打印id

>>> print map(id,[ [] ]*10)
[958336, 958336, 958336, 958336, 958336, 958336, 958336, 958336, 958336, 958336]


您会看到它们都是一样的:

最简单的解决方法是执行以下操作:

[ [['O','O'] for _ in range(10)] for x in range(1, 11) ]

10-02 09:25