
回复
解释这个问题之前,首先说明一下is和==的区别
None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。None是python中的一个特殊的常量,表示一个空的对象,空值是python中的一个特殊值。数据为空并不代表是空对象,例如[],''等都不是None。None和任何对象比较返回值都是False,除了自己。
is None是判断两个对象在内存中的地址是否一致,== None背后调用的__eq__(),而__eq__()可以被重载,万一被重载,会造成一定影响,请看下面的例子:
另外从执行效率上来看,'is' is a LOT faster than '=='。
比较操作符is效率优于==,因为is操作符无法被重载,执行is操作只是简单的获取对象的 ID,并进行比较;
而==操作符则会递归地遍历对象的所有值,并逐一比较。
以上。
版权声明: 本文为 InfoQ 作者【王坤祥】的原创文章。