我创建了一个 10 x 10 的游戏板。这是一个二维列表,里面还有另一个 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 是一个游戏 block ,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) ]
