我正在尝试使用 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()
在这里造成差异?
Python 是
测试对象标识,而不是值相等。使用 ==
比较值。
至于示例情况,这是因为 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
不应该出于这个原因用于值比较,即使它在某些情况下工作得“很好”。