话说发现一个奇怪的问题,我还以为找到了IDLE的bug,兴奋不已,原来是已经讨论过千百遍的问题。
事情是这样的。在IDLE下运行这段代码:
a = “aaa”
b = “aaa”
print a is bTrue
print a == b
True
print “%s , %s” % (id(a), id(b))
43872224 , 43872224 都是True,挺正常的。但是一旦字符串里有了个空格:
x = “x x”
y = “x x”
print x is yFalse
print x == y
True
print “%s , %s” % (id(x), id(y))
43872008 , 43872128 就变成False了。 把这些代码打到PyCharm里,却都是True,这是怎么回事呢?难道是IDLE的BUG? 经过在群里的讨论和stackoverflow上的提问与搜索,发现原来python只保证-5到256之间的整数,用is比较会返回true,其它情况下的行为没有规定。不同的编辑器可以有不同的实现,我们不能依赖它去判断,而应该用id(x)这个方法。 那我们应该什么时候使用is呢?在与python提供的内置对象进行比较时,可以用它,比如:
if a is None:
pass</font> 更多讨论参考: