У меня есть 2 переменные (ссылки) a и b, которые указывают на один и тот же объект, и, конечно же,
a is b #true
Но когда я спрашиваю об адресе памяти для того же объекта, на который указывает эта ссылка
id(a) is id(b) #false
Означает ли это, что id создает новый объект? Как долго этот объект будет существовать? Какой это будет тип? Что происходит?
Отвечает ли это на ваш вопрос? Есть ли разница между "= = " и "is"?
Вы также можете обратиться к документации Python: docs.python.org/3/library/functions.html#id
Итак, id возвращает int, и этот int сохраняется как объект int... но что происходит со ссылкой на этот новый объект?
Я пытаюсь сказать, что в основном id (a) должен хранить эти данные где-то в памяти, верно? поэтому py должен создать новый объект с типом int (ty), ссылкой, данными gc и этим int. Что будет со ссылкой?
Объект int
, возвращаемый id()
, будет существовать ровно столько, сколько на него есть ссылка — точно так же, как любой другой объект в Python.
@jasonharper id (a) - это id (b) - здесь ... я не очень понимаю справочную часть. При вызове id(a) будет ли он создавать ссылку сам по себе?
id()
вернет ссылку, потому что для функций Python не существует другой возможности. Является ли эта ссылка существующим int
объектом или совершенно новым int
объектом, это не то, о чем вам когда-либо нужно заботиться, но на практике в данной конкретной ситуации это почти наверняка будет новый объект. Поэтому тест is
выдает False, даже если два объекта int имеют одинаковое числовое значение.
>>> a is b
True
Это один и тот же объект...
>>> id(a) == id(b)
True
У них одинаковые идентификаторы...
>>> id(a) is id(b)
False
... но int
egers, представляющие их id
, не являются одним и тем же объектом.
Это потому, что в Python int
тоже object
.
Я бы посоветовал вам прочитать this
, this
и this
.
Да, это в основном ответ. Ty FLAK-ZOSO и @jasonharper, теперь мне просто нужно обдумать часть создания референсов..
идентификатор возвращает целое число. Используйте
==
для сравнения целых чисел, а неis
.