我创建了一个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) ]