可能的重复:
Python“is”运算符对整数的行为异常 https://stackoverflow.com/questions/306313/python-is-operator-behaves-unexpectedly-with-integers
昨晚遇到了一些奇怪的事情
if max_urls is 0:
max_urls = 10
总是返回 false...即使 max_urls 为 0...它是从数据库分配的。当我做了一个
print type(max_urls)
会回来
<type 'long'> 0
这看起来是正确的,但它总是会返回 false。
如果我把它改成
if max_urls == 0:
max_urls = 10
那么最后当它为0时就会返回true。为什么==和is有区别?
==
是一个值比较,is
是对象身份(内存位置)比较。你会经常看到类似的比较max_urls is 0
将给出预期的结果,因为小值是usually缓存在Python中,但你总是想使用==
代替is
检查相等性时,因为这种行为不可靠。
下面是一个简短的例子来说明这一点:
>>> a = 0
>>> (a == 0, a is 0)
(True, True)
>>> a = 1000
>>> (a == 1000, a is 1000)
(True, False)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)