使用'is'关键字(或The Magical 257)比较整数

时间:2014-11-04 01:50:29

标签: python int compare equality

我遇到了一个非常奇怪的行为,我无法解释(运行Python 2.7.6)。

众所周知,您不应该使用Python中的is来比较字符串。但是,我完全没有意识到尝试比较int时会出现类似的不良情况。

以下面的脚本为例:

for x, y in zip(xrange(0,399), xrange(1,400)):
    z = y - 1
    if x is z:
        res = 'good'
    else:
        res = 'bad '
    print res, x, z

输出:

...
good 254 254
good 255 255
good 256 256
bad  257 257
bad  258 258
bad  259 259
...

257的这个看似神奇的价值中,is停止按预期工作。出于某种原因,Python创建了一个新容器来保存计算结果。

但是,似乎只涉及计算时,的值大于256

>>> 255 is 255
True
>>> 256 is 255 + 1
True
>>> 257 is 257
True
>>> 258 is 257 + 1
False

257有什么特别之处?我是否一直误导,不应该使用is来比较int s?

0 个答案:

没有答案