Как вы можете видеть, списки a и b указывают на одну и ту же ячейку памяти. Тогда как список c - это совершенно другая ячейка памяти. Можно сказать, что переменные a и b являются псевдонимами для одного и того же списка. Таким образом, любое изменение, внесенное в переменную a или b, будет отражено и в другом списке, но не в списке c Надеюсь, это поможет! :)
Ответ 4
Python указывает оба списка в vec = v на одну и ту же область памяти.
Чтобы скопировать список, используйте vec = v[:]
Все это может показаться нелогичным. Почему бы не сделать копирование списка поведением по умолчанию? Рассмотрим ситуацию
deffoo(): my_list = some_function() # Do stuff with my_list
Разве вы не хотели бы my_list содержать точно такой же список, который был создан в some_function, и не заставлять компьютер тратить дополнительное время на создание копии. Для больших списков копирование данных может занять некоторое время. По этой причине Python не копирует список при назначении.
Разное Примечания:
Если вы знакомы с языками, использующими указатели. Внутренне, в результирующем языке ассемблера, vec и v - это просто указатели, которые ссылаются на адрес в памяти, с которого начинается список.
Другие языки смогли преодолеть препятствия, о которых я упоминал, благодаря использованию копирования при записи, которое позволяет объектам совместно использовать память до тех пор, пока они не будут изменены. К сожалению, в Python это никогда не реализовывалось.