"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)
这意味着 x
和 y
引用内存中的同一个对象 因此x is y
returns
True
.
现在回答你的问题,
def foo(el):
return (el is 0.0)
在函数foo
el is 0.0
returnsFalse
中因为el
和0.0
这两个实体分别指的是里面的不同位置记忆。您可以通过比较 id(el) == id(0.0)
和 returns False
.
来验证这一事实
为什么下面的代码会产生:
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
returnsFalse
。 - 在情况 2
id(x)
等于id(y)
这意味着x
和y
引用内存中的同一个对象 因此x is y
returnsTrue
.
现在回答你的问题,
def foo(el):
return (el is 0.0)
在函数foo
el is 0.0
returnsFalse
中因为el
和0.0
这两个实体分别指的是里面的不同位置记忆。您可以通过比较 id(el) == id(0.0)
和 returns False
.