使用is运算符时出现异常的比较结果

时间:2014-06-06 07:31:34

标签: python

我正在尝试使用is运算符比较变量。这是我做过的事情

def get_no():
    return 1234

a = get_no()
b = 1234
c = 1234
print(a is 1234) #False
print(a is b)    #False
print(b is c)    #True

a is b预计为False,因为两者都指向不同的值。但是,为什么b is c会返回True?为什么函数get_no()会在这里造成差异?

1 个答案:

答案 0 :(得分:0)

Python is测试对象标识,而不是值相等。使用==来比较值。

至于示例情况,这是因为Python如何处理引擎盖下的某些值。例如,在我的系统上,5的整数值实际上是同一个对象,而1234是另一个对象。您可以使用内置的id函数验证这一点。

>>> a = 5
>>> b = 5
>>> a is b
True
>>> id(a)
25769987752
>>> id(b)
25769987752

>>> a = 1234
>>> b = 1234
>>> a is b
False
>>> id(a)
25770739272
>>> id(b)
25770390520

这可能是因为Python中的一些内部优化,显然可能因环境而异。

底线是,is因为这个原因不应该用于价值比较,即使它在某些情况下运作良好。