Это целое число, которое гарантированно будет уникальным и постоянным для < Br /> Этот объект в течение своей жизни. Два объекта с непересекающимся
могут иметь одинаковый id () < /code> значение. < /P>
< /blockquote>
Подробная информация CPYTHON: это адрес объекта в памяти. Поскольку я явно не Del объекты, я предполагаю, что они все живы и уникальны (я не знаю, что означает непересечение).
Код: Выделить всё
>>> g = [0, 1, 0]
>>> for h in g:
... print(h, id(h))
...
0 10915712
1 10915744
0 10915712
>>> a=0
>>> b=1
>>> c=0
>>> d=[a, b, c]
>>> for e in d:
... print(e, id(e))
...
0 10915712
1 10915744
0 10915712
>>> id(a)
10915712
>>> id(b)
10915744
>>> id(c)
10915712
>>>
Если бы я сделал = c, то я понимаю, что c имеет тот же идентификатор, что и a, поскольку c будет просто ссылкой на a (псевдоним). В противном случае я ожидал, что объекты a и c будут иметь разные значения id, но, как показано выше, они имеют одинаковые значения.
Что такое происходит? Или я смотрю на это неправильно?
Я ожидаю, что идентификаторы для объектов определяемого пользователем класса будут ВСЕГДА уникальными. даже если у них одинаковые значения членов.
Может ли кто-нибудь объяснить такое поведение? (Я рассмотрел другие вопросы, в которых задается использование id(), но они направлены в другом направлении)
EDIT (30.09.2019):< /strong>
Чтобы расширить то, что я уже написал, я запустил интерпретаторы Python в отдельных терминалах и проверил идентификаторы на 0 на всех из них, они были совершенно одинаковыми (для одного и того же переводчика); несколько экземпляров разных интерпретаторов имели один и тот же идентификатор для 0. Python2 и Python3 имели разные значения, но один и тот же интерпретатор Python2 имел одинаковые значения id.
Мой вопрос заключается в том, что в документации id() этого нет. указать любые подобные оптимизации, что кажется вводящим в заблуждение (я не ожидаю, что будут отмечены все причуды, но было бы неплохо сделать некоторые примечания рядом с примечанием CPython)...
EDIT 2 (30.09.2019):
Вопрос заключается в том, чтобы понять это поведение и узнать, есть ли какие-либо приемы для оптимизации определяемых пользователем классов аналогичным образом (по изменение метода __equals__ для определения того, являются ли два объекта одинаковыми; возможно, они будут указывать на один и тот же адрес в памяти, т.е. на один и тот же идентификатор ИЛИ использовать некоторые свойства метакласса)
Подробнее здесь: https://stackoverflow.com/questions/581 ... uniqueness
Мобильная версия