Python 3.1 快速導覽 - 運算式 is運算

is 為 Python 的關鍵字 (keyword) 之一,用來判斷兩個物件 (object) 是否相等,也就是判斷由內建函數 (function) id() 回傳的 id 號碼是否一樣。



以下程式示範
a = 12
b = 12
c = 22

if a is b:
    print("a is b")

if a is c:
    print("a is c")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:expr16.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



由此例可見出, a 與 b 雖然是不同的整數變數 (variable) ,但內含數值 (value) 相同,對 Python 而言,等於只建立一個整數 12 的物件,而 a 與 b 共同連結到這個物件。這樣的情況對字串 (string) 也受用,因為字串是不可變的 (immutable) ,因此相同內容的字串也會是相同的物件。


is 也可以和 not 連用,可判斷兩個是否為不同物件
a = 12
b = 12
c = 22

if a is not b:
    print("a is not b")

if a is not c:
    print("a is not c")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:expr17.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



但是 isis not 的使用需注意一點,對於可變 (mutable) 的資料型態,例如串列 (list) 就算有相同的內容,實際上仍會是不同的物件,例如
a = []
b = []

if a is b:
    print("a is b")

if a is not b:
    print("a is not b")

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:expr18.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



這是因為不可變的資料型態 (data type) ,一旦建立該物件後,內容不可再做變更,因此 Python 處理這方面只建立單一的物件,以節省記憶體空間,而可變的資料型態,由於內容可以再做變更,因此無論建立多少相同內容的物件,這都會在記憶體上是不同的物件。


中英文術語對照
關鍵字keyword
物件object
函數function
變數variable
數值value
字串string
不可變的immutable
可變mutable
串列list
資料型態data type






沒有留言: