關鍵字 (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 之後,這時候 a 跟 b 都指向相同的串列,因此再做 is 判斷就會得到 True 的結果
a = []
b = a
print(a is b)
print(a == b)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:is04.py
# 功能:示範 is 運算
# 作者:張凱慶
於命令列執行以上程式,結果如下
$ python3 is04.py |
True |
True |
$ |
相關教學影片