Функция 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
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
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

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