Python 簡易手冊

單元 18 - is 運算子

is 運算子 (operator) 用來判斷前後運算元 (operand) 是否為相同的物件 (object) ,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 建立兩個空字串變數
a = ""
b = ""

# 判斷兩個變數的值是否相等
print(a == b)

# 判斷兩個變數是否為相同物件
print(a is b)

# 印出兩個變數所指向的記憶體位址
print(id(a))
print(id(b))

# 檔名: is_demo.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

此例先建立兩個空字串 (string) 變數 (variable) ,然後在第 6 行用連續兩個等號判斷兩個變數的值 (value) 是否相等

 5
 6
# 判斷兩個變數的值是否相等
print(a == b)

字串會在單元 33 - 字串詳細介紹。

繼續在第 9 行用 is 運算子判斷兩個變數是否為相同物件

 8
 9
# 判斷兩個變數是否為相同物件
print(a is b)

由於字串是不可變的 (immutable) ,因此凡是程式中建立任一字串,這個字串物件只會被建立一次,接下來所有變數都會只指向這個唯一的字串物件,第 12 行與第 13 行利用內建函數 (built-in function) id() 會印出兩個變數的記憶體位址

11
12
13
# 印出兩個變數所指向的記憶體位址
print(id(a))
print(id(b))

如果記憶體位址是一樣的,那就表示這兩個是相同的物件,此例執行結果如下

> python is_demo.py
True
True
4325992760
4325992760
>

反之如果是可變的 (mutable) 資料型態,那具有相同的值並不代表是相同物件,因為可變資料型態的物件可變動內容,例如以下將上例用串列 (list) 改寫

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 建立兩個空串列變數
a = []
b = []

# 判斷兩個變數的值是否相等
print(a == b)

# 判斷兩個變數是否為相同物件
print(a is b)

# 印出兩個變數所指向的記憶體位址
print(id(a))
print(id(b))

# 檔名: is_demo2.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

串列會在單元 39 - 串列詳細介紹。

以上只有將變數改成空串列,執行結果如下

> python is_demo2.py
True
False
4378364288
4378366144
>

兩個空串列具有相同的值,但不是相同的物件。

參考資料

上一頁 單元 17 - 小括弧、逗號與計算優先次序
回 Python 簡易手冊 首頁
下一頁 單元 19 - in 運算子
回 Python 教材首頁
回程式語言教材首頁