首先来看看例子:ide
(1) >>> a = 'hello world' >>> b = 'hello world' >>> print(id(a),id(b)) 2037326180976 2037326180784 >>> print(a is b) False >>> print(a == b) True (2) >>> a = 'hello world' >>> b = a >>> print(id(a),id(b)) 2037326181168 2037326181168 >>> print(a == b) True >>> print(a is b) True
上述例子(1)中的a、b分别指向的是不一样的内存空间,此时a is b返回False,a == b返回True。但例(2)中当a和b指向相同内存空间时a is b返回的是True,a == b返回还是True。没错,根据官方文档中的说法,is表示的是对象标识符(object identity),而==用来检查值相等(equality)。换句话说,is就是用来判断两个对象是否在本质上是一个对象,即占用的是不是相同的内存空间。因此当咱们在判断a is b时实际上是判断id(a) == id(b),而检查a == b时实际上是调用了__eq__()方法,至关于a.__ eq __(b)。code