Идентификатор Python()
Функция Python id() возвращает «идентификатор» объекта. Идентификатор объекта — это целое число, которое гарантированно будет уникальным и постоянным для этого объекта в течение его жизни. Два объекта с непересекающимися временами жизни могут иметь одинаковые значения. Значение id() В реализации CPython это адрес объекта в памяти.
Идентификатор Python()
Python кэширует значение id() часто используемых типов данных, таких как кортежи и т. д. Таким образом, вы можете обнаружить, что несколько переменных ссылаются на один и тот же объект и имеют одинаковое значение id(), если их значения одинаковы. Давайте проверим это на примере.
# integers
a = 10
b = 10
c = 11
d = 12
print(id(a))
print(id(b))
print(id(c))
print(id(d))
Выход:
4317900064
4317900064
4317900096
4317900128
Обратите внимание, что значения id() для «a» и «b» одинаковы, они имеют одинаковое целочисленное значение. Давайте посмотрим, получим ли мы подобное поведение со строками и кортежами?
# tuples
t = ('A', 'B')
print(id(t))
t1 = ('A', 'B')
print(id(t1))
# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))
Выход:
4320130056
4320130056
4320080816
4320080816
Из вывода видно, что Python кэширует строки и объекты кортежа и использует их для экономии места в памяти.
Кэширование может работать только с неизменяемыми объектами, обратите внимание, что неизменяемыми являются целые числа, строки, кортежи. Таким образом, реализация Python может использовать кэширование для экономии места в памяти и повышения производительности.
Мы знаем, что словарь не является неизменным, давайте посмотрим, отличается ли id() для разных словарей, даже если элементы одинаковы?
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
Выход:
4519884624
4519884768
Как мы и думали, объекты dict возвращают другое значение id(), и здесь, похоже, нет кэширования.
Идентификатор Python() для пользовательского объекта
Давайте рассмотрим простой пример получения значения id() для пользовательского объекта.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
Выход:
4520251744
4520251856
Резюме
Значение Python id() гарантированно будет уникальным и постоянным для объекта. Мы можем использовать это, чтобы убедиться, что два объекта ссылаются на один и тот же объект в памяти или нет.
Вы можете проверить полный скрипт Python и другие примеры Python в нашем репозитории GitHub.
Ссылка: Официальная документация