1. 程式人生 > >Python 之 “==” 和 “is”

Python 之 “==” 和 “is”

Python 之 “==” 和 “is”


==運算子比較兩個物件的值,is比較物件的標識。
物件的值很容易理解,比如color_1=green,color_2=green,那麼color_1 == color_2 這完全沒問題。而物件的標識是什麼意思呢?在《流暢的Python》提到:
每個變數都有標識、型別和值。物件一旦建立,它的標識絕不會變;你可以把標識理解為物件在記憶體中的地址。is運算子比較兩個物件的標識;id()函式返回物件標識的整數表示。
舉個例子:
比如color_1指示的green的地址是1,color_2指示的green地址是2,那麼color_1 is color_2 返回的值是False;如果green的地址都是1的話,返回值就是True。
下面是執行例項:

>>> a = 123
>>> b = 123
>>> a == b
True
>>> a is b
True
>>> a = 123456789
>>> b = 123456789
>>> a == b
True
>>> a is b
False

這裡發生了一點小插曲,“a is b”看似同樣的輸入竟出現了截然相反的結果!這裡其實是一個CPython的一個優化措施,防止重複建立熱門數字,稱為駐留。CPython會在小整數和字串上運用這項優化措施。其實這個可以完全忽略,只要記住在以後比較字串和整數時用‘==’而不是‘is’就可以了。
總而言之,is比較的是在根上的一致,比如給你兩個一模一樣的家庭住址,讓你去統計一下常駐人口,那麼你無論按照哪個地址去統計的肯定是同一個結果。而 == 只是比較這個結果,而不管你這個結果來自哪個地址。只要人口數相同 == 返回值就是True,而is只有在這兩個家庭地址一樣的情況下才會返回True。