我正在尝试使用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()
会在这里造成差异?
答案 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
因为这个原因不应该用于价值比较,即使它在某些情况下运作良好。