Python id() — это встроенная функция, которая используется для получения и возврата идентификатора объекта. Два объекта с непересекающимися циклами жизни могут иметь одинаковое значение id(). В реализации CPython это адрес объекта в памяти.

Пример id() Python
Кэш Python — это значение id() часто используемых типов данных, таких как строка, целое число, кортежи и т. д. Таким образом, вы можете обнаружить, что несколько переменных ссылаются на один и тот же объект и имеют одно и то же значение id, если их значения одинаковый.
Синтаксис
|
1 |
id(object) |
Функция id() принимает объект с одним параметром.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# app.py # integers a = 11 b = 21 c = 19 d = 18 print(id(a)) print(id(b)) print(id(c)) print(id(d)) |
Вывод:
|
1 2 3 4 5 6 |
➜ pyt python3 app.py 4304849600 4304849920 4304849856 4304849824 ➜ pyt |
Функция id() возвращает идентификатор объекта. Это целое число, уникальное для данного объекта и остающееся постоянным в течение всего срока его службы.
Давайте посмотрим, получим ли мы аналогичное поведение со строкой и кортежами.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# app.py # tuples t =('Eleven', 'Mike') print(id(t)) t1 =('Dustin', 'Suzie') print(id(t1)) # strings s1 = 'Jane' s2 = 'Jane' print(id(s1)) print(id(s2)) |
Вывод:
|
1 2 3 4 5 6 |
➜ pyt python3 app.py 4358154504 4358154440 4356016256 4356016256 ➜ pyt |
Как мы видим, функция принимает единственный параметр и используется для возврата идентификатора объекта. Идентификатор должен быть уникальным и постоянным для этого объекта в течение всего срока службы.
Два объекта с непересекающимися временами жизни могут иметь одинаковое значение id(). Python кэширует строки и объекты кортежа и использует их для экономии места в памяти. Мы знаем, что словарь не является неизменным. Итак, функция id() отличается для разных словарей, даже если элементы одинаковы.
|
1 2 3 4 5 6 |
# app.py a1 = {"age": 26, "year": 1993} a2 = {"age": 26, "year": 1993} print(id(a1)) print(id(a2)) |
См. следующий вывод.
|
1 2 3 4 |
➜ pyt python3 app.py 4345653144 4345653216 ➜ pyt |
Объекты dict возвращают другое значение id(), и здесь, похоже, нет кэширования.
Python id() для пользовательского объекта
См. следующий пример.
|
1 2 3 4 5 6 7 8 9 10 11 |
# app.py class Student: data = 0 e1 = Student() e2 = Student() print(id(e1)) print(id(e2)) |
Вывод:
|
1 2 3 4 |
➜ pyt python3 app.py 4349781216 4349781328 ➜ pyt |
Значение Python id() гарантированно уникально и постоянно для объекта. Мы можем использовать это, чтобы убедиться, ссылаются ли два объекта на один и тот же объект в памяти или нет.
