Проблема связывания списков при инициализации списка с помощью [[]] * n
При инициализации списка списков с использованием [[]] n программисты часто сталкиваются с неожиданной проблемой, когда списки кажутся связанными друг с другом. Это происходит потому, что синтаксис [x]n создает несколько ссылок на один и тот же базовый объект списка, а не создает отдельные экземпляры списка.
Чтобы проиллюстрировать проблему, рассмотрим следующий код:
x = [[]] * 3 x[1].append(0) print(x)
Вывод этого кода:
[[0], [0], [0]]
Вместо ожидаемого вывода:
[[], [0], []]
Проблема связана с тем, что каждый элемент в списке является ссылкой на один и тот же объект списка. Когда один из элементов изменяется, это затрагивает все остальные элементы.
Чтобы создать список действительно различных списков, правильный подход — использовать понимание списка:
x = [[] for i in range(3)]
Этот синтаксис создает новый объект списка для каждого элемента в списке, гарантируя, что они независимы.
Следующий код служит демонстрацией:
In [20]: x = [[]] * 4
In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
In [22]: x=[[] for i in range(4)]
In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3