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

标签 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() 在这里造成差异?

最佳答案

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 不应该出于这个原因用于值比较,即使它在某些情况下工作得“很好”。

关于python - 使用 is 运算符时出现异常比较结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24076538/

相关文章:

python - 如何将子进程文本输出发送到 Tkinter 文本小部件?

python - 如何找到数据框特定列值的不同计数

python - Gauss-Legendre 区间 -x -> 无穷大 : adaptive algorithm to transform weights and nodes efficiently

python - Django Admin 没有这样的表

Python elementtree 很难提取数据

Python - 将两个列表合并为一个 json 对象

python - Python 中有超过三种类型的方法吗?

python - 子类化和扩展 numpy.ndarray

python - 查找元素的直接子元素

python urllib2 无法获取特定的 url