我遇到了一个非常奇怪的行为,我无法解释(运行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?