2014-02-06 6 views
0

В __cmp__ `я прочитал:Являются ли адреса Python сравнимыми как строки или ints?

Если ни __cmp__(), __eq__() or __ne__() операция не определена, экземпляры классов сравниваются по идентичности объекта («адрес»).

От 5.3 Comparisons:

CPython детали реализации: Объекты различных типов, кроме чисел упорядочены по именам их типа; объекты того же типа, которые не поддерживают надлежащее сравнение, упорядочиваются по их адресу.

Имеет ли значение идентификатор значение, возвращаемое функцией id() (длинный int)?

Соответственно, адреса сравниваются, как если бы они были ints? Или они сравниваются как строки?

Я попытался написать свой собственный пример, но не могу понять, как это сделать.

+1

Они упорядочены по int, но почему эта деталь реализации имеет значение для вас? Это плохая идея, чтобы попытаться упорядочить объекты разных типов в любом случае (в Python 3 это просто ошибка, разумно). – geoffspear

+0

Это просто любопытство, я не мог найти ответа. Во всяком случае, я имел в виду упорядочение объектов одного типа без переопределения метода \ __ lt__. Благодарю. –

ответ

2

Адрес/идентификатор возвращается id(), и это возвращает целочисленное значение, поэтому да, они упорядочены как int.

Из официальной документации:

идентификатор (объект)

Верните «идентичность» объекта. Это целое число (или длинное целое число), которое гарантировано является уникальным и постоянным для этого объекта в течение его жизни. Два объекта> с неперекрывающимися временами жизни могут иметь одинаковое значение id().

Детали реализации реализации CPython: это адрес объекта в памяти.

Проверьте это самостоятельно. Откройте интерактивную консоль и напишите следующее:

>>> class Test(object): 
>>>  pass 
>>> test1 = Test() 
>>> test2 = Test() 
>>> 
>>> print id(test1), id(test2) 
35677712 35678128 # You can see the second one is bigger. Both integers! 
>>> 
>>> print test1 > test2 
False 
>>> print test1 < test2 
True 

В любом случае это бесполезно. И в Python 3 возникает ошибка

+0

Я был бы признателен за объяснение для downvoting. – bgusach

+2

Не мой нисходящий сигнал, но вы получите тот же результат, если идентификаторы были упорядочены лексически, так как они оба имеют одинаковое количество цифр. Это ничего не доказывает. – geoffspear

+0

Вы имеете в виду, что я не уточнил, что они заказаны по адресу, адресующему 'int'? Если это так, я предположил, что ясно, что 'id()' возвращает целое число, но теперь я включил его в ответ. – bgusach

 Смежные вопросы

  • Нет связанных вопросов^_^