is 和 == ============ is 和 == --------- ``is`` 的作用是用来检查对象的标示符(object identity)是否一致,也就是比较两个对象在内存中的地址是否一样,而 ``==`` 是用来检查两个对象是否相等。 我们在检查 ``a is b`` 的时候,其实相当于检查 ``id(a) == id(b)``。而检查 ``a == b`` 的时候,实际是调用了对象a的 ``__eq__()`` 方法,``a == b`` 相当于 ``a.__eq__(b)``。 一般情况下,如果 ``a is b`` 返回True的话,即a和b指向同一块内存地址的话,``a == b`` 也返回True,即a和b的值也相等。 .. code-block:: python :linenos: >>> a = "hello" >>> b = "hello" >>> a == b True >>> a is b False >>> a = [1,2,3] >>> b = a >>> a == b True >>> a is b True None -------- 与 ``None`` 比较是 ``is None`` 而不是 ``== None`` 。 这是因为 ``None`` 在Python里是个单例对象(singleton):一个变量如果是 ``None`` ,它一定和 ``None`` 指向同一个内存地址。 而 ``== None`` 背后调用的是 ``__eq__`` ,而 ``__eq__`` 可以被重载,下面是一个 ``is not None`` 但 ``== None`` 的例子。 .. code-block:: python :linenos: class Foo(object): def __eq__(self, other): return True foo = Foo() print foo == None # True print foo is None # False 参考资料 --------------------- 1. 经典7大Python面试题 https://blog.csdn.net/qq_41597912/article/details/81459804