Найти в Дзене
Секреты python

В python нет переменных?

В классическом понимании "переменная" представляет собой "ячейку" в оперативной памяти компьютера, в которой может храниться какая-либо информация. Переменная может иметь имя и тип данных. Подробнее про типы данных в python можно прочитать здесь. Как создаётся "переменная" в python? Представим, что нам необходимо создать "переменную" p (тип - целое число равное 123). Способ 1. Тип определяется python автоматически (динамически) и может быть изменён в будущем. p = 123 Способ 2. Тип указывается пользователем (строгая типизация) и не может быть изменён. # имя: тип = значение p : int = 123 При создании переменной в python создаётся сущность PyObject (а-ля контейнер) со следующими основными характеристиками: Далее создаётся имя p, которое указывает на PyObject. Счётчик ссылок PyObject увеличивается на 1. Т. е. p не владеет блоком памяти напрямую, в котором хранится значение 123. Доступ к памяти имеет PyObject. Что происходит при изменении значения? Если мы поменяем значение p на 321, т
Оглавление
В классическом понимании "переменная" представляет собой "ячейку" в оперативной памяти компьютера, в которой может храниться какая-либо информация.

Переменная может иметь имя и тип данных. Подробнее про типы данных в python можно прочитать здесь.

Как создаётся "переменная" в python?

Представим, что нам необходимо создать "переменную" p (тип - целое число равное 123).

Способ 1. Тип определяется python автоматически (динамически) и может быть изменён в будущем.

p = 123

Способ 2. Тип указывается пользователем (строгая типизация) и не может быть изменён.

# имя: тип = значение
p : int = 123

При создании переменной в python создаётся сущность PyObject (а-ля контейнер) со следующими основными характеристиками:

  • код типа данных (typecode);
  • значение (из примера выше - 123);
  • счётчик ссылок (со значением 0).

Далее создаётся имя p, которое указывает на PyObject. Счётчик ссылок PyObject увеличивается на 1.

Т. е. p не владеет блоком памяти напрямую, в котором хранится значение 123. Доступ к памяти имеет PyObject.

Что происходит при изменении значения?

Если мы поменяем значение p на 321, то будет создан новый PyObject с указанными выше характеристиками. Счетчик ссылок для нового PyObject увеличится на 1, а для старого (со значением 123) уменьшится.

Старый PyObject будет удален сборщиком мусора.

Иногда компиляторы python могут менять эту модель поведения для оптимизации скорости выполнения кода. В статье описан общий подход.