Python 中进行 None 判断时,为什么用 is 而不是 ==

用户头像
王坤祥
关注
发布于: 2020 年 06 月 30 日
Python中进行None判断时,为什么用is而不是==

解释这个问题之前,首先说明一下is和==的区别



  • is表示的是对象标识符,用来检查对象的标识符是否一致,即两个对象在内存中的地址是否一致。在使用a is b的时候,相当于id(a)==id(b)

  • ==表示两个对象是否相等,相当于调用__eq__()方法,即a==b ==>a.__eq__(b)



None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。None是python中的一个特殊的常量,表示一个空的对象,空值是python中的一个特殊值。数据为空并不代表是空对象,例如[],''等都不是None。None和任何对象比较返回值都是False,除了自己。



a = None
b = None
print(id(a) == id(b)) # True



is None是判断两个对象在内存中的地址是否一致,== None背后调用的__eq__(),而__eq__()可以被重载,万一被重载,会造成一定影响,请看下面的例子:



class test():
def __eq__(self, other):
return True
t = test()
print(t is None) # False
print(t == None) # True



另外从执行效率上来看,'is' is a LOT faster than '=='。





比较操作符is效率优于==,因为is操作符无法被重载,执行is操作只是简单的获取对象的 ID,并进行比较;

==操作符则会递归地遍历对象的所有值,并逐一比较。



以上。



发布于: 2020 年 06 月 30 日 阅读数: 35
用户头像

王坤祥

关注

日拱一卒,功不唐捐。 2017.10.17 加入

不懂热能的低温工程师不是好程序猿

评论

发布
暂无评论
Python中进行None判断时,为什么用is而不是==