Оба 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].