Присваивание переменных

Python - регистрозависимый язык, поэтому большие и маленькие буквы он будет воспринимать как совершенно разные символы. Пробелы обычные, к слову, для питона не пустота, а такие же символы, как и другие.

В питоне динамическая типизация, это значит, что нет проблем при переопределении, например, строковых переменных в числовые (str int и наоборот) и при присваивании нет нужды определять вручную тип переменной - питон сам разберется, в основном из-за наличия или отсутствия кавычек в поле значения переменной. Если есть кавычки - str, нет - int.


На примере

Обычное присваивание

varName = 'Python'

На самом деле переменные - это ссылки на объект, а не сам объект. Объект (например, строка или число) создаётся и хранится в памяти компьютера, а переменная лишь ссылается на место в оперативной памяти, где хранятся эти данные.

Множественное присваивание

a, b, c = 1, 2, 3
# то же самое, что и 👇
a = 1
b = 2
c = 3

Присваивание происходит позиционно, поэтому его еще называют позиционным присваиванием.
Но при использовании такого присваивания создается кортеж для хранения переменных. И говорят, что это более требовательная операция, чем обычное присваивание. Поэтому, к слову, не страшно использовать обычное присваивание вместо множественного.

Есть задача, где требуются заменить значения переменных a и b без использования третьей переменной. Решается множественным присваиванием:

a, b = b, a  # обмен значениями переменных

Присваивание переменным одного значения

a = b = c = 12

Под капотом

600

>>> y = 5
>>> x = 12 - y
>>> x
7

В фрагменте выше python сделал следующее:

  • создал int объект со значением 5;
  • создал переменную у, которая указывает на этот объект;
  • нарастил счетчик ссылок для объекта, содержащего значение 5;
  • вычел значение объекта, на который указывает переменная у (5), из значения 12, содержащегося в анонимном объекте;
  • присвоил результат (7) новому (пока еще безымянному) int объекту;

В python выражение после знака = вычисляется первым и только потом присваивается переменной, стоящей до знака =. Проще представлять это так:

>>> a = 95
>>> temp = a - 3
>>> a = temp

Счетчик ссылок

Когда кол-во ссылок на объект становится равным нулю - это означает, что ни одно имя на него больше не ссылается хранить такой объект нет нужды. В python имеется сборщик мусора, позволяющий юзать память, занятую уже ненужными на данный момент объектами. Сборщик мусора может либо кикнуть ненужные значения/переменные, либо оставить их для большей производительности, ибо небольшие целые числа юзаются часто.

Поскольку имена указывают на объекты, если изменить значение, присвоенное имени, оно начнет указывать на другой объект (с новым значением). Счетчик ссылок старого объекта уменьшится на 1, а нового увеличится на 1.


Соус: Книга “Простой Python Глава 2. “Данные: типы, значения, переменные и имена

python