Python地址是作为字符串还是整数进行比较的?

时间:2014-02-06 12:05:32

标签: python comparison memory-address comparison-operators

__cmp__中,我读到了:

如果没有定义__cmp__(), __eq__() or __ne__()操作,则按对象标识(“地址”)比较类实例。

来自5.3 Comparisons

CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

identity是否意味着id()函数返回的值(long int)?

地址比较,就好像它们是整数一样?或者他们被比作字符串?

我试着写自己的例子,但我无法弄清楚如何。

1 个答案:

答案 0 :(得分:2)

地址/标识与id()一起返回,这将返回一个整数值,所以是的,它们按整数排序。

来自官方文件:

  

ID(对象)

     

返回对象的“标识”。这是一个整数(或长整数),它保证在该生命周期内对于该对象是唯一且恒定的。两个具有非重叠生命周期的对象可能具有相同的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中引发错误