Это:
class chessBoard:
BOARD = None
BOARD_WIDTH = 8
def __init__(self,W = 8):
self.BOARD = []
self.BOARD_WIDTH = W
aRow = ['.'] * self.BOARD_WIDTH # this is one list, it's a reference to data
for curRow in range(self.BOARD_WIDTH):
self.BOARD.append(aRow) # adds the same reference 8 times
Ваш список содержит одну и ту же ссылку 8 раз. Если вы меняете данные с помощью одной ссылки, другие (которые совпадают) также отражают это.Все ссылки указывают на одни и те же данные.
Использование
self.BOARD.append(['.'] * self.BOARD_WIDTH) # add "unique" lists instead
Вы можете проверить id()
s:
# your version ( self.BOARD.append(aRow) )
print(list(map(id,myChessBoard.BOARD)))
[140415825494600, 140415825494600, 140415825494600, 140415825494600,
140415825494600, 140415825494600, 140415825494600, 140415825494600]
# fixed version (self.BOARD.append(['.'] * self.BOARD_WIDTH))
[140560309994568, 140560309994440, 140560309994376, 140560309994312,
140560309994248, 140560309994184, 140560309994120, 140560309994696]
См. Для чего используется функция id ()?