`is`比较:直接对象比较与对象身份表示的比较

时间:2017-03-26 17:27:32

标签: python python-2.7

所以我得到了以下结果:

  1. () is ()返回True(两个对象之间的比较)
  2. id(()) is id(())返回False。 (对象身份的表示之间的比较)
  3. 根据python documentation

      

    'is'运算符比较两个对象的身份; id()函数返回一个表示其身份的整数。

    给定案例(1),对象()与对象()具有相同的身份(内存地址);但在情况(2)中,他们的身份的表示彼此并不相同。

    为什么?

1 个答案:

答案 0 :(得分:1)

id(..)函数返回一个整数,表示对象的“身份”。虽然如果两个变量xy引用相同的对象,x is y成功,id(x)的结果相同,则确实如此到id(y)并不意味着那些整数本身就是同一个对象

您应该使用:

id(()) == id(())
#      ^ == not is

在Python中,即使int是对象,虽然通常有缓存,小整数确实引用同一个对象,但以下测试通常会失败:

>>> 1234567890 is (1234567891-1)
False
>>> 1234567890 == (1234567891-1)
True