總結 is 和 == 的區別
05-12
官方文檔中說 is 表示的是對象標示符(object identity),而 == 表示的是相等(equality)。is 的作用是用來檢查對象的標示符是否一致,也就是比較兩個對象在內存中的地址是否一樣,而 == 是用來檢查兩個對象是否相等。
我們在檢查 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 的值也相等。總結一句話就是
is 是檢查兩個對象是否指向同一塊內存空間,而 == 是檢查他們的值是否相等。可以看出,is 是比 == 更嚴格的檢查,is 返回True表明這兩個對象指向同一塊內存,值也一定相同。
拓展:
上面個判斷為什麼會有不同的結果:
解釋:首先:is判斷的時候和字元串長短沒有關係,而是因為 intern機制,在交互模式下,每行字元串字面量都會申請一個新字元串,但是只含大小寫字母、數字和下劃線的會被intern,也就是維護了一張dict來使得這些字元串全局唯一
因為a = a b之間有空格,在交互模式下,每行字元串字面量都會申請一個新字元串(id 值不會相同),is判斷的時候他們就不是都指向一個空間了,出現 false.
推薦閱讀:
※「面試達人」面試官問:「你做過最有成就感的事情是什麼?」
※HR遇到了真正的面試高手,句句經典!
※為什麼面試官要問「你父母從事什麼職業」這種沒營養的問題?
※面試時HR問:「你還有什麼想問的」,我該怎麼回答?
※男士面試時,需要注意的儀容儀錶問題有哪些?