Ответ 1
Нет, переменные в Python не являются указателями.
Вместо этого они ссылаются на объекты в куче, а присвоение переменной не изменяет ссылочный объект, а переменную. Переменные и объекты похожи на ярлыки, привязанные к воздушным шарам; назначение вместо этого присваивает метку другому шару.
Смотрите этот мой предыдущий ответ, чтобы изучить эту идею воздушных шаров и надписей немного больше.
Тем не менее, некоторые типы объектов реализуют специфическое поведение добавления на месте. Если объект изменен (сам воздушный шар может измениться), то добавление на месте может быть интерпретировано как мутация вместо назначения.
Итак, для целых чисел item += 1
действительно то же самое, что и item = item + 1
, потому что целые числа неизменны. Вы должны создать новый целочисленный объект и привязать метку item
к этому новому объекту.
Списки с другой стороны, являются изменяемыми и lst += [other, items]
реализуется как lst.__iadd__([other, items])
и который изменяет сам шар lst
. Назначение все еще имеет место, но это переопределение одного и того же объекта, так как метод .__iadd__()
просто возвращает self
вместо нового объекта. Мы заканчиваем тем, что привязываем ярлык к тому же воздушному шару.
Цикл просто дает вам ссылку на следующий элемент в списке на каждой итерации. Он не позволяет вам изменять исходный список (это просто еще один набор ярлыков шаров); вместо этого он дает вам новый ярлык каждому из содержащихся элементов.