Как переменные ссылаются друг на друга
Присваивание по значению и ссылке
Переменная при присваивании получает значение или ссылку на существующий объект. Это зависит от типа присваиваемого значения. Все типы В Python подразделяются на изменяемые (mutable) и неизменяемые (unmutable) типы.
Изменение величины неизменяемого типа приводит к выделению в памяти нового блока ячеек и записи в них значения. Предыдущий блок ячеек памяти при этом освобождается. Этот эффект в операции присваивания имеет следующее действие:
>>> a=1
>>> a
1
>>> b=a
>>> b
1
>>> a=2
>>> a
2
>>> b
1
Из данного примера видно, что переменные a и b обозначают различные участки памяти и изменение значения одной переменной не приводит к изменению другой. К неизменяемым типам относятся числовые типы и строки. Для этих типов передача значений от одной переменной к другой производится по значению.
Иное поведение можно наблюдать у остальных типов данных. Рассмотрим пример:
>>> a=[1,2,3]
>>> b=a
>>> b
[1, 2, 3]
>>> a.append(5)
>>> b
[1, 2, 3, 5]
>>> b.append(6)
>>> a
[1, 2, 3, 5, 6]
В данном случае изменение значения одной переменной приводит к изменению значения другой. Такая связь переменных производится по ссылке – две переменные ссылаются на один блок памяти.