Олег Марков
Что делает функция id в Python
Введение
Функция id() возвращает уникальный идентификатор объекта в процессе выполнения программы. Понимание того, что именно возвращает id, помогает разобраться в модели объектов Python, отличать физическое совпадение объектов от равенства по значению и правильно работать с изменяемыми типами.
Если вы хотите детальнее погрузиться в внутреннюю модель объектов Python и управление памятью — приходите на наш курс Основы Python. На курсе 209 уроков и 34 упражнения, AI-тренажёры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Что возвращает id()
Синтаксис прост:
id(obj)Функция возвращает целое число, которое в большинстве реализаций CPython соответствует адресу объекта в памяти во время жизни этого объекта. Стандарт языка гарантирует только уникальность значения id для каждого объекта в течение его жизненного цикла, но не гарантирует, что это будет постоянный адрес между запусками интерпретатора.
Пример:
a = 1000
b = 1000
print(id(a), id(b)) # идентификаторы могут совпадать или отличаться в зависимости от реализации и оптимизацийИнтернирование и неизменяемые типы
Python применяет оптимизации, такие как интернирование небольших целых чисел и некоторых строк, что приводит к совпадению id у отдельных одинаковых значений:
x = 10
y = 10
print(id(x) == id(y)) # часто True для маленьких целых чиселДля изменяемых объектов (списков, словарей и т.д.) интернирование не применяется, и одинаковое по содержанию значение обычно имеет разные id:
x = [1, 2, 3]
y = [1, 2, 3]
print(id(x) == id(y)) # Falseid() и оператор is
Оператор is проверяет, ссылаются ли две переменные на один и тот же объект. По сути a is b эквивалентно id(a) == id(b):
a = [1, 2]
b = a
print(a is b) # True
print(id(a) == id(b)) # True
c = [1, 2]
print(a is c) # False
print(a == c) # True, значения совпадаютВажно использовать is и id() только тогда, когда нужно проверить тождественность объектов, а не равенство значений.
Отладка и практическое применение
id() полезна при отладке для выяснения, создаёт ли код новые объекты или работает с уже существующими ссылками:
- Проверка, изменится ли объект в ходе функции или будет создан новый экземпляр
- Определение, когда копирование данных происходит неявно
- Диагностика проблем, связанных с побочными эффектами и общим состоянием
Пример диагностики:
def modify(lst):
print("id входного списка", id(lst))
lst.append(4)
print("id после изменения", id(lst))
nums = [1, 2, 3]
print("id до вызова", id(nums))
modify(nums)В большинстве случаев id останется прежним, что подтверждает изменение объекта на месте.
Особенности и ограничения
id()даёт уникальный идентификатор только в рамках одного процесса Python, число не переносимо между разными запусками интерпретатора- В разных реализациях Python (
PyPy,Jython) семантикаidможет отличаться от адреса в памяти - Не стоит использовать
id()как ключ постоянного хеширования или для логики, зависящей от стабильного адреса во времени
Частые ошибки
- Использование
isдля проверки равенства значений вместо проверки тождественности объектов - Делать выводы о расположении данных в памяти, основываясь только на значениях
idв разных запусках - Полагаться на совпадение
idдля неизменяемых объектов без учета интернирования
Заключение
Функция id() — инструмент для понимания ссылочной модели Python и диагностирования поведения объектов в памяти. Она помогает отличить тождественность объектов от равенства по значению и понять, когда операции создают новые объекты, а когда изменяют существующие.
Для системного изучения внутренних механизмов объектов, изменяемости и модели памяти рекомендую пройти курс Основы Python. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Python прямо сегодня.
Постройте личный план изучения Python до уровня Middle — бесплатно!
Python — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Все гайды по Python
Лучшие курсы по теме

Основы Python
Антон Ларичев
Nest.js с нуля
Антон Ларичев