Функция ID создает новый объект?

У меня есть 2 переменные (ссылки) a и b, которые указывают на один и тот же объект, и, конечно же,

a is b #true

Но когда я спрашиваю об адресе памяти для того же объекта, на который указывает эта ссылка

id(a) is id(b) #false

Означает ли это, что id создает новый объект? Как долго этот объект будет существовать? Какой это будет тип? Что происходит?

идентификатор возвращает целое число. Используйте == для сравнения целых чисел, а не is.

khelwood 10.04.2022 21:03

Отвечает ли это на ваш вопрос? Есть ли разница между "= = " и "is"?

SuperStormer 10.04.2022 21:04

Вы также можете обратиться к документации Python: docs.python.org/3/library/functions.html#id

VoidTwo 10.04.2022 21:04

Итак, id возвращает int, и этот int сохраняется как объект int... но что происходит со ссылкой на этот новый объект?

nachtblume 10.04.2022 21:07

Я пытаюсь сказать, что в основном id (a) должен хранить эти данные где-то в памяти, верно? поэтому py должен создать новый объект с типом int (ty), ссылкой, данными gc и этим int. Что будет со ссылкой?

nachtblume 10.04.2022 21:10

Объект int, возвращаемый id(), будет существовать ровно столько, сколько на него есть ссылка — точно так же, как любой другой объект в Python.

jasonharper 10.04.2022 21:10

@jasonharper id (a) - это id (b) - здесь ... я не очень понимаю справочную часть. При вызове id(a) будет ли он создавать ссылку сам по себе?

nachtblume 10.04.2022 21:13
id() вернет ссылку, потому что для функций Python не существует другой возможности. Является ли эта ссылка существующим int объектом или совершенно новым int объектом, это не то, о чем вам когда-либо нужно заботиться, но на практике в данной конкретной ситуации это почти наверняка будет новый объект. Поэтому тест is выдает False, даже если два объекта int имеют одинаковое числовое значение.
jasonharper 10.04.2022 21:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
8
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
>>> a is b
True 

Это один и тот же объект...

>>> id(a) == id(b)
True 

У них одинаковые идентификаторы...

>>> id(a) is id(b)
False 

... но integers, представляющие их id, не являются одним и тем же объектом.

Это потому, что в Python int тоже object.


Я бы посоветовал вам прочитать this, this и this.

Да, это в основном ответ. Ty FLAK-ZOSO и @jasonharper, теперь мне просто нужно обдумать часть создания референсов..

nachtblume 10.04.2022 21:17

Другие вопросы по теме