id
Функция id() возвращает уникальный идентификатор объекта. Этот идентификатор представляет адрес объекта в памяти (хотя точное значение зависит от реализации Python).
Синтаксис
id(object)
Аргументы
- object:
- Что означает: Объект, для которого нужно получить уникальный идентификатор.
- Возможные значения: Любой объект Python (числа, строки, списки, классы, функции и т. д.).
Возвращаемое значение
Целое число, представляющее уникальный идентификатор объекта.
Примеры использования
# Получение идентификатора для целого числа
x = 42
print(id(x)) # Например, 140733193388048
# Идентификатор для строки
s = "hello"
print(id(s)) # Например, 140349834802352
# Идентификатор одного объекта остается неизменным
lst = [1, 2, 3]
print(id(lst)) # Например, 140349834936384
lst.append(4)
print(id(lst)) # Идентификатор тот же, так как объект изменяемый
# Разные идентификаторы для разных объектов
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a)) # Например, 140349834936192
print(id(b)) # Например, 140349834936256 (другой идентификатор)
Частые ошибки
Неправильное предположение, что идентификатор сохраняется после удаления объекта:
x = 213445644 id_x = id(x) del x y = 213445644 print(id(y) == id_x) # True или False, зависит от работы сборщика мусора
Как исправить: Не полагайтесь на идентификаторы удаленных объектов.
Сравнение по id вместо сравнения объектов:
# Разные идентификаторы для разных объектов a = [1, 2, 3] b = [1, 2, 3] print(id(a) == id(b)) # False (хотя возможно и True)
Как исправить: Сравнивать объекты, а не их id.
Часто задаваемые вопросы
Что такое идентификатор объекта? Это уникальное число, которое идентифицирует объект в памяти. На практике оно может представлять адрес объекта, но точное значение зависит от реализации Python.
Одинаковы ли идентификаторы для одинаковых объектов? Для неизменяемых объектов (например, некоторых чисел или некоторых строк) Python может повторно использовать идентификаторы. Например:
a = 42 b = 42 print(id(a) == id(b)) # True (для неизменяемых объектов)
Для изменяемых объектов, таких как списки, идентификаторы будут разными:
a = [1, 2, 3] b = [1, 2, 3] print(id(a) == id(b)) # False
Может ли идентификатор объекта измениться? Нет, идентификатор объекта остаётся неизменным на протяжении жизни объекта.
Что произойдет с идентификатором после удаления объекта? Идентификатор может быть перераспределён для нового объекта, если старый был удалён.
x = [1, 2, 3] id_x = id(x) del x y = [4, 5, 6] print(id(y) == id_x) # Может быть True
Могу ли я использовать id() для сравнения объектов? Да, идентификаторы можно использовать для проверки, являются ли два объекта одним и тем же в памяти:
a = [1, 2, 3] b = a print(id(a) == id(b)) # True
Однако для этого лучше подходит оператор is:
a = [1, 2, 3] b = a print(a is b) # True