Переменные и константы в Python
Переменные встречаются в каждой строке программы, поэтому ошибки в их понимании дорого обходятся. Вы узнаете, как объявлять и менять переменные, присваивать несколько значений сразу и как в Python принято обозначать константы, которых в языке формально нет.
Примеры рассчитаны на Python 3.12 и 3.13. Отдельный раздел внизу страницы объясняет модель, которую часто упускают в учебниках: переменная в Python не коробка, а имя, привязанное к объекту. Это знание избавляет от самых коварных багов со списками и словарями.

Содержание статьи
Переменные и константы в Python - это то, без чего нельзя обойтись в любом языке программирования. В основе основ лежит переменная, и вам надо на отлично понимать, что это такое, и для чего она используется. И так, переменная - это именование определенной части памяти, куда мы записываем нужные нам данные, что бы в последующем по имени нашей переменной, вызвать из памяти нужные нам данные. Проще говоря, переменная эта коробка, куда мы можем складывать нужные нам данные, данные в этой коробке мы можем менять, и в любое время получать содержимое этой коробки. Например:
chislo = 12 # создали переменную число, и присвоили ей значение 12
Как мы уже говорили, мы можем менять и получать значения в нашей переменной (коробке), поэтому давайте попробуем изменить значение, то есть перезаписать данные.
chislo = 12
chislo = 1.6
print(chislo)
результат:
1.6 # как мы видим у нас при выводе значения переменной, изменилось старое значение 12, на новое 1.6
Назначение значений переменным в Python
В вышеописанном коде, вы наверное уже успели заметить, что вы можете использовать оператор присваивания = для присвоения значения переменной. Ниже мы более подробно рассмотрим объявление, изменение, присваивание нескольких значений и прочее.
Пример 1. Объявление переменной, и присваивание значения
site = "google.com"
print(site)
результат:
google.com
В приведенной программе, мы с вами объявили переменную site, присвоили ему значение google.com, и с помощью функции print() распечатали значение. Важно понимать то, что в Python нам не нужно явно указывать тип данных содержимого в переменной, Python сам понимает где строка, где число.
Пример 2. Изменение значения переменной
site = "google.com"
print(site)
site = "egesoch.cc"
print(site)
Результат:
google.com
egesoch.cc
В данной программе, мы присвоили нашей переменной сначала одно значение, затем, изменили его.
Пример 3. Присвоение нескольких значений нескольким переменным
a, b, c = 10, 1.2, "hello world" # Объявляя переменные через запятую, мы так же можем объявлять нужные значения в нужном порядке через запятую, и в результате мы получим, то, что у каждой переменной свое значение в соответствии с указанным порядком
print(a)
print(b)
print(c)
Рассмотрим еще один пример:
a = b = c = "hello" # всем переменным в данном случае присвоится строка "hello"
print(a)
print(b)
print(c)
Константа в Python
Ранее мы говорили о переменных, как о коробках в которых содержаться данные, и в случае с переменными, мы всегда можем получить содержимое, и так же его менять. Так вот, Константа это примерно тоже самое, но, значение константы не меняется. Значение константы постоянное - это нужно запомнить.
Пример: Объявление и присвоения значения константе
Откройте свой Pycharm, и создайте файл constanta.py, затем в созданном файле, объявите константу, как в примере ниже.
PI = 3.14 # В качестве значения присвоим число ПИ
GRAVIT = 9.8 # Ускорение свободного падения, м/с2
Теперь создайте еще один файл main.py
import constanta # Импортируем раннее созданный constanta.py
print (constanta.PI) # Печатаем значение ранее объявленной константы
print (constanta.GRAVIT) # Печатаем значение ранее объявленной константы
результат:
3.14
9.8
Еще немного о константах в Python. На самом деле, в Python нет отдельного понимания константы, мы обозначаем название константы заглавными буквами для того, что бы отличить их от обычных переменных, и это никак не помешает переопределить значение.
Следующий урок: Типы данных в Python 3
Переменная как имя объекта: ссылки и изменяемость
Сравнение с коробкой удобно на первых шагах, но оно неточное. В Python переменная - это имя, которое указывает на объект в памяти. Присваивание b = a не копирует данные, а создает второе имя для того же объекта.
a = [1, 2, 3]
b = a # второе имя того же списка
b.append(4)
print(a) # -> [1, 2, 3, 4]
print(a is b) # -> True
c = a.copy() # новый список
c.append(5)
print(a) # -> [1, 2, 3, 4]
print(c) # -> [1, 2, 3, 4, 5]
С числами и строками такой проблемы нет: они неизменяемые, и любая операция создает новый объект. Поэтому x = 5; y = x; y += 1 не меняет x.
Та же модель объясняет поведение функций. Когда вы передаете список в функцию, параметр становится еще одним именем того же объекта, и метод append() внутри функции изменит список снаружи. Если функция должна работать с копией, создайте ее явно. Учтите, что copy() делает поверхностную копию: вложенные списки по-прежнему общие, для полной копии нужен copy.deepcopy(). Проверить, указывают ли два имени на один объект, помогают оператор is и функция id().
| Тип | Изменяемый | Что произойдет при b = a и изменении b |
|---|---|---|
int, float, str, tuple | нет | b получит новый объект, a не изменится |
list, dict, set | да | изменения видны через оба имени |
Константы с Final и Enum
Запись заглавными буквами только договоренность. Чтобы инструменты проверки ловили случайное переопределение, добавьте аннотацию Final:
from typing import Final
MAX_USERS: Final = 100
TIMEOUT_SEC: Final[float] = 2.5
MAX_USERS = 200 # Python выполнит, но mypy и PyCharm покажут ошибку
Для набора связанных значений лучше подходит перечисление. Его члены нельзя переприсвоить даже во время выполнения:
from enum import Enum
class Color(Enum):
RED = "#ff0000"
GREEN = "#00ff00"
print(Color.RED.value) # -> #ff0000
Color.RED = "blue" # AttributeError
Частые ошибки с переменными
- Затенение встроенных имен:
list = [1, 2]илиsum = 0ломают одноименные функции до конца модуля. - Использование до присваивания: обращение к имени, которому еще не присвоено значение, дает
NameError. - Обмен значений через третью переменную: в Python достаточно
a, b = b, a. - Сравнение с None через ==: правильно писать
if value is None.
Какие типы может хранить переменная, разобрано в статье Типы данных в Python 3.
Частые вопросы
Здесь собраны вопросы, с которыми обычно сталкиваются на практике, и короткие ответы на них.
Нужно ли объявлять тип переменной в Python?
Нет, тип определяется по значению во время выполнения, и одна переменная может последовательно ссылаться на число и строку. Аннотация вроде count: int = 0 необязательна и служит подсказкой для редактора и анализаторов.
Как сделать настоящую константу, которую нельзя изменить?
Встроенного механизма для обычных имен нет. На практике используют Final для проверки анализатором, Enum для наборов значений и неизменяемые типы вроде кортежа или frozenset, чтобы содержимое не меняли случайно.
Чем is отличается от ==?
== сравнивает значения, is проверяет, что оба имени указывают на один и тот же объект. Для чисел и строк используйте ==, а is применяйте для None, True и False.
Какие имена переменных допустимы?
Имя начинается с буквы или подчеркивания, дальше идут буквы, цифры и подчеркивания. Регистр важен, ключевые слова запрещены. По PEP 8 переменные пишут в snake_case латиницей, например user_count.