Влияние изменения элементов списка на связанные переменные

Оба print выведут [2, 3, 4]: a и b ссылаются на один список, а цикл заменяет элементы именно этого общего контейнера.

Короткий ответ

Что ответить на собеседовании

Оба print выведут [2, 3, 4]: a и b ссылаются на один список, а цикл заменяет элементы именно этого общего контейнера.

Подробный разбор

Ответ с пояснениями

Условие

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

a = [1, 2, 3]
b = a

for i in range(len(b)):
    b[i] += 1

print(a)
print(b)

Ответ

Оба print выведут [2, 3, 4]: a и b ссылаются на один список, а цикл заменяет элементы именно этого общего контейнера.

Присваивание b = a не создаёт копию. На каждой итерации вычисляется новое целое число и записывается в b[i], то есть в тот же список, который доступен через a.

assert a is b
print(a)  # [2, 3, 4]
print(b)  # [2, 3, 4]

Неизменяемость целых чисел не делает неизменяемым сам список: его ссылки на элементы можно заменять. Чтобы оставить a прежним, сначала выполните b = a.copy() либо создайте новый список выражением b = [x + 1 for x in a].

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее