1. 程式人生 > >Python中運算子 is 和 == 的區別

Python中運算子 is 和 == 的區別

Python 中有個很有趣的運算子–is,其作用看似和==是一樣的,但實際上並非如此。

通過一個示例來看一下兩者的去區別:

>>> a = b = [1,2,3]
>>> c = [1,2,3]
>>> a == b
True
>>> a == c
True
>>> a is b
True
>>> a is c
False

前幾個示例沒啥問題,但是最後一個a is c 返回 False,為什麼會這樣呢?因為 is 檢查的是兩個物件是否相同,而不是相等,變數 x 和 y 指向同一個列表,而c 指向另一個列表,雖然兩個的值都是一樣,但是並不是同一個物件,所以這裡 a is c 返回 False

再來看個示例,可以更加說明這一點:

>>> a = [1,2,3]
>>> b = [2,1]
>>> a is not b
True
>>> del a[2]
>>> a
[1, 2]
>>> b.reverse()
>>> b
[1, 2]
>>> a==b
True
>>> a is b
False

從上例可以看到,a 和 b 一開始就不是同一個列表值,所以 a is not b自然返回的是 False,經過調整將a 和 b 的值修改成一樣,這時候 a==b返回 True,而 a is b 依然返回False。 很顯然這兩個列表相等,但並不相同。 總之,==是用來檢查兩個物件是否相等,而 is 用來檢查兩個物件是否相同。

注意:不要將 is 用於數字或字串這種不可變的基本值。鑑於 Python內部處理這些物件的方式,這種做法的介面將會不可預測。

本書知識點來源於《Python 基礎教程》第三版。