我正在尝试使用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()
在这里引起差异?
Pythonis
测试对象身份,而不是值相等。使用==
比较值。
对于示例情况,这是因为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
即使出于某些原因,也不应将其用于价值比较,即使它工作得很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句