Possible Duplicate:
Python “is” operator behaves unexpectedly with integers
昨晚在哪里遇到了奇怪的事
if max_urls is 0:
max_urls = 10
总是会返回错误。。。即使最大URL是0。。。。它是从数据库中分配的。当我做一个
print type(max_urls)
会回来的
<type 'long'> 0
这似乎是对的,但它总是会返回错误。
如果我把它改成
if max_urls == 0:
max_urls = 10
最后,当它是0时,它将返回true。为什么==和is之间有区别?
is
运算符检查两个引用是否指向同一对象。您正在测试long(0)
是否与int(0)
是同一个对象,答案是否。如果您打印它们的对象ID,这将非常清楚:另一方面,检查两个值是否相等,即使它们不是完全相同的对象。例如:
注意:重要的是,我使用的是777,而不是1或2这样的较小数字。引用Python manual:
==
是值比较,is
是对象标识(内存位置)比较。您经常会看到像max_urls is 0
这样的比较会给出预期的结果,因为小值通常是在Python中缓存的值,但是您总是希望在检查相等性时使用==
,而不是is
,因为此行为不可依赖。下面是一个简单的示例,说明了这一点:
相关问题 更多 >
编程相关推荐