Как переменные ссылаются друг на друга

Присваивание по значению и ссылке

 

Переменная   при присваивании получает   значение или  ссылку  на  существующий объект.  Это зависит от типа присваиваемого значения. Все типы  В 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]

 

 

В данном  случае   изменение значения одной переменной приводит к  изменению значения другой. Такая связь переменных  производится по  ссылке – две  переменные ссылаются на один  блок памяти.