學習Python,is和==的本質區別你知道嗎?

在Python中,is和==都是Python的內置操作符,它們都可以用來判斷兩個對象是否相等,但兩者卻有本質的區別,下面我們來詳細看看這兩者的區別。

一、is操作符

is操作符的作用是比較兩個變量/數據是否指向同一塊內存區域,也就是判斷id(變量/數據)是否相等(id函數可以用來獲取某個變量/數據的內存地址)。

當兩個變量是共享引用關係的話,它們指向的肯定是同一塊內存區域,它們的id值會完全一致,所以用is判斷得到的結果肯定為True。

學習Python,is和==的本質區別你知道嗎?

除了共享引用關係,在Python中還存在緩存的機制,如果兩個變量a和b引用的都是緩存中的數據對象,那麼a is b的結果也會為True。對於Python中的緩存機制在另一篇文章中詳細進行了敘述,讀者感興趣可移步詳細閱讀。Python的數據緩存機制探究

二、==操作符

==操作符用來判斷兩個對象的數據是否相等,而不用關注它們的id是否一致,例如:

學習Python,is和==的本質區別你知道嗎?

當兩個類的實例進行比較時,如果實例的數據一致時也不一定相等,如下:

學習Python,is和==的本質區別你知道嗎?

為了讓類的實例可以進行==比較,需要重新實現__eq__函數。

學習Python,is和==的本質區別你知道嗎?

從上面這個示例可以看出,在__eq__函數內部定義的邏輯是隻要u變量的值相等了,兩個類的實例就可以判定為相等。

歡迎大家留言討論,提出寶貴意見建議,喜歡的朋友也可以關注本頭條號,【玩轉Python】將持續為大家提供優質的技術內容。


分享到:


相關文章: