Python 速查手冊

3.7 is 運算

關鍵字 (keyword) is 的作用是判斷變數 (variable) 所指向的物件 (object) 是否相同,所謂相同的意義是兩個變數是否指向相同的記憶體位址。

is 與比較運算子中的相等比較,也就是連續兩個等號的運算子的功能是不一樣的,相等比較是做內容的比較,如果物件是一樣的,內容自然相同,物件是不一樣的話,內容也有可能相同。

這裡先來看看整數的例子,整數不管用 is 或相等比較都是一樣的

a = 1
b = 1
print(a is b)
print(a == b)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:is01.py
# 功能:示範 is 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 is01.py
True
True
$

浮點數就不一樣了,這就是說新建立的浮點數 1.0 ,這會放在新的記憶體位址,因此內容一樣,卻不是相同的物件,以下用互動式介面示範

>>> a = 1.0
>>> b = 1.0
>>> a is b
False
>>> a == b
True
由於直譯器最佳化的緣故,有些場合可能會把相同的浮點數當成相同的物件,也就是存放在相同記憶體位址的物件,因此 is 判斷會回傳 True

字串的情況的整數一樣,無論 is 或相等比較都是 True

a = "1"
b = "1"
print(a is b)
print(a == b)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:is02.py
# 功能:示範 is 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 is02.py
True
True
$

最後看到串列 (list) ,雖然變數 a 及變數 b 都是空串列 (empty list) ,卻不是相同的物件

a = []
b = []
print(a is b)
print(a == b)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:is03.py
# 功能:示範 is 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 is03.py
False
True
$

如果把 a 重新指派給 b 之後,這時候 ab 都指向相同的串列,因此再做 is 判斷就會得到 True 的結果

a = []
b = a
print(a is b)
print(a == b)

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:is04.py
# 功能:示範 is 運算
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 is04.py
True
True
$

相關教學影片

上一頁: 3.6 del 運算
Python 速查手冊 - 目錄
下一頁: 3.8 in 運算
回 Python 教材首頁
回程式語言教材首頁