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

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

因为None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。

在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False

>>> a = None
>>> b = None
>>> id(a) == id(b)
True

is None是判断两个对象在内存中的地址是否一致,
== None背后调用的是eq,而eq可以被重载,
下面是一个 is not None但 == None的例子:

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