Переменные в Python не требуют объявления типа переменной (так как Python – язык с динамической типизацией) и являются ссылками на область памяти. Правила именования переменных:
Создавать переменные в Python очень просто:
In [1]: a = 3 In [2]: b = 'Hello' In [3]: c, d = 9, 'Test' In [4]: print(a,b,c,d) 3 Hello 9 Test
Обратите внимание, что в Python не нужно указывать, что "a" это число, а "b" это строка.
Переменные являются ссылками на область памяти. Это легко продемонстрировать с помощью id(), которая показывает идентификатор объекта:
In [5]: a = b = c = 33 In [6]: id(a) Out[6]: 31671480 In [7]: id(b) Out[7]: 31671480 In [8]: id(c) Out[8]: 31671480
В этом примере видно, что все три имени ссылаются на один и тот же идентификатор, то есть, это один и тот же объект, на который указывают три ссылки – "a", "b" и "c". С числами у Python есть одна особенность, которая может немного сбить с понимания: числа от -5 до 256 заранее созданы и хранятся в массиве (списке). Поэтому при создании числа из этого диапазона фактически создаётся ссылка на число в созданном массиве.
Эта особенность характерна именно для реализации CPython, которая рассматривается в книге
Это можно проверить таким образом:
In [9]: a = 3 In [10]: b = 3 In [11]: id(a) Out[11]: 4400936168 In [12]: id(b) Out[12]: 4400936168 In [13]: id(3) Out[13]: 4400936168
Обратите внимание, что у "a", "b" и числа "3" одинаковые идентификаторы. Все они просто являются ссылками на существующее число в списке.
Если сделать то же самое с числом больше 256, идентификаторы у всех будут разные:
In [14]: a = 500 In [15]: b = 500 In [16]: id(a) Out[16]: 140239990503056 In [17]: id(b) Out[17]: 140239990503032 In [18]: id(500) Out[18]: 140239990502960
При этом, если сделать присваивание переменных друг другу, то идентификаторы будут у всех одинаковые (в таком варианте "a", "b" и "c" просто ссылаются на один и тот же объект):
In [19]: a = b = c = 500 In [20]: id(a) Out[20]: 140239990503080 In [21]: id(b) Out[21]: 140239990503080 In [22]: id(c) Out[22]: 140239990503080
Имена переменных не должны пересекаться с названиями операторов и модулей или же других зарезервированных слов. В Python есть рекомендации по именованию функций, классов и переменных: