2015-05-25 5 views
2

Я пытаюсь инициализировать матрицу списка списков символов.Я пытаюсь инициализировать матрицу, но повторяю ту же строку

aRow = [ '0', '0','0' ] 
aGrid = [ aRow, aRow, aRow ] 

После того, как появился, как повторил один ряд три раза, я пытался модифицировать строки следующими образом и печатью результата:

aGrid[1][0] = '1' 
aGrid[2][0] = '2' 

print(aGrid) 

Похоже, я получаю третью строку три раза.

[['2', '0', '0'], ['2', '0', '0'], ['2', '0', '0']] 

Почему?

ответ

1

Потому что вы находитесь. Вам нужно скопировать объект, если вы хотите, чтобы содержимое было другим.

aGrid = [aRow, aRow[:], aRow[:]] 
+0

Немного краткий, но вы отвечаете, давая решение, а не просто объясните, почему он не работает. (К сожалению, это был мой вопрос. В следующий раз я просто спрошу: «Как вы это исправите?») – mkstlwtz

2

В python, когда вы назначаете значения, вы действительно назначаете ссылки на значения. Так что это утверждение создает список со значением ['0', '0', '0'] и присваивает ссылку на это значение aRow:

aRow = [ '0', '0','0' ] 

И так это заявление затем создает список с тремя ссылками на тот же список:

aGrid = [ aRow, aRow, aRow ] 

В Python списки являются изменяемыми значениями, поэтому изменения базового значения отражаются всеми ссылками на это значение. Итак:

aGrid[1][0] = '1' 

и:

aGrid[2][0] = '2' 

Как изменить первый элемент базового списка, что все три ссылок в aGrid ссылаются, и поэтому последнее изменение является тот, который вы увидите.

Смежные вопросы