“is”运算符对整数的行为出乎意料

  • 问题:
  • 为什么在Python中以下的行为会出人意料?在

    >>> a = 256
    >>> b = 256
    >>> a is b
    True # This is an expected result
    >>> a = 257
    >>> b = 257
    >>> a is b
    False # What happened here? Why is this False?
    >>> 257 is 257
    True # Yet the literal numbers compare properly

    我使用的是python2.5.2。尝试一些不同版本的Python时,python2.3.3显示了99到100之间的上述行为

    基于以上所述,我可以假设Python是在内部实现的,这样“小”整数的存储方式与大整数的存储方式不同,is运算符可以区分这两种情况。为什么是漏洞百出的抽象?当我事先不知道它们是否是数字时,有什么更好的方法来比较两个任意的对象,看它们是否相同?在

  • 答案:
  • 看看这个:

    >>> a = 256
    >>> b = 256
    >>> id(a)
    9987148
    >>> id(b)
    9987148
    >>> a = 257
    >>> b = 257
    >>> id(a)
    11662816
    >>> id(b)
    11662828

    这是我在Python2文档中发现的,“Plain Integer Objects”它是同一个当前实现保持