Есть работающий код задания двумерного массива:
field=[]
for i in range(8):
block = []
for j in range(8):
block.append('X')
field.append(block)
Выгялдит не очень, но он работает! Суть проблемы в том что при "не красивой" инициализации все списки отдельные объекты и когда мы делаем изменение в ячейке меняется только она.
Как сократить, чтобы код был более "питонистичным", но и сохранить правильную изменяемость ячеек (функциональность)?
Что-то вроде
field = [['X']*8]*8
Но так при изменении поля, меняются все поля по координате из-за того что все ссылаеться на один список.
Хочу чтобы при field[2][2] = 'O' изменялась только ячейка [2][2], а не весь столбец
field[2][2] = 'O'
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
['X', 'X', 'O', 'X', 'X', 'X', 'X', 'X']
Пытался использовать [:], list, но результата нет
Ответ
L = [['X' for n in range(8)] for n in range(8)]