Поиск по сайту:

Идентификатор 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.

Ссылка: Официальная документация