首先來看看例子: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