"is" 关键字在 python 中的行为?

Behaviour of "is" keyword in python?

为什么下面的代码会产生:

False
False
False

而不是:False True False

def foo(el):
    return (el is 0.0)

seq=[0,0.0,False]
for el in seq:
    print( foo(el) )

python中的is关键字用于测试两个变量是否引用同一个对象。它returnsTrue 如果两个变量引用同一个对象,否则它 returns False.

例如考虑名为 A:

class
class A:
    pass

案例一:

x = A() #--> create instance of class A
y = A() #--> create instance of class A

>>> x is y
>>> False

案例二:

x = A() #--> create instance of class A
y = x #--> here y refers to the instance of x
>>> x is y
>>> True

基本上,如果两个变量引用相同的内存位置,则它们引用相同的对象。您可以使用 python 中名为 id() 的内置函数检查变量的身份,此函数 returns 对象的身份(对象在内存中的地址)。

  • 情况 1 id(x) 不等于 id(y) 因此 x is y returns False
  • 情况 2 id(x) 等于 id(y) 这意味着 xy引用内存中的同一个对象 因此x is y returns True.

现在回答你的问题,

def foo(el):
    return (el is 0.0)

在函数fooel is 0.0returnsFalse中因为el0.0这两个实体分别指的是里面的不同位置记忆。您可以通过比较 id(el) == id(0.0) 和 returns False.

来验证这一事实