Python: почему значения списка меняются, даже если не указано? - PullRequest
0 голосов
/ 06 марта 2019

Это сбивает с толку меня, два списка меняются параллельно, хотя второй не трогается.

Я искал и обнаружил, что должен использовать понимание списка, чтобы получить новый указатель, и поэтому я выиграл 'не работает с тем же списком, но, тем не менее, он все еще делает ниже!Я не могу найти причину такого поведения в сети.

display_order = current_order[:]
print(current_order)
print(display_order)
display_order[0][3] = "CHANGE"
print(current_order)
print(display_order)

Вывод:

[['ID', 'Product', '999', 'Section', 'Seat']]
[['ID', 'Product', '999', 'Section', 'Seat']]
[['ID', 'Product', '999', 'CHANGE', 'Seat']]
[['ID', 'Product', '999', 'CHANGE', 'Seat']]

1 Ответ

0 голосов
/ 06 марта 2019

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

display_order = current_order[:]

Вы получаете эту ситуацию в памяти:

display order -----> [['ID', 'Product', '999', 'Section', 'Seat']]
                      ^
                      |
current_order ---------

Они оба указывают на один и тот же список.

Вы можете избежать этой ситуации с помощью глубокой копии списка, которая скопирует значения первого списка в новое место в памяти. Замените упомянутую строку этой строкой:

display_order = copy.deepcopy(current_order)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...