Table
一. 什麼是 Immutable objects
如果物件被創造出來後,其 value 沒辦法被改變,稱之為 Immutable objects。
常見的 Immutable objects 的型態,像是 int, float, string, tuple。
以 int 型態為舉例:
1 2 3 4 5 6 7 |
a = 1000 print(id(a)) >>> 4320093280 a += 1 print(id(a)) >>> 4320093102 |
首先我們寫 a = 1000
,會先創建一個 int 1000 的物件,並將 a 指向 int 1000 物件的位置,可以用 id(a) 來看到他的記憶體位置是 4320093280。
再來我們修改 a += 1
時,會產生新的 int 1001,並將 a 指向這個新產生的物件,用 id(a) 來看到他的記憶體位置變成 4320093102。
從範例 Code 中可以看出,當修改 a 時,並不會去修改 1000 這個物件的值,而是會重新創造出一個新的物件,我稱之為 Immutable objects。
二. 什麼是 Mutable objects
如果物件被創造出來,其 value 可以被改變,我們稱為 Mutable objects。
常見的 Mutable objects 型態像是 list, dict, set。
以 list 型態為舉例:
首先我們寫了 a = [1,2]
,會創造出一個 list 型態的物件並將 a 指向他,而他的記憶體位置是 4339561600,當我們修改這個 list 新增一個 3 進去時 a.append(3)
,可以看到修改後記憶體位置不變。
三. 了解為 Immutable 和 Mutable 有什麼好處?
Immutable objects 在讀取和儲存時比較有效率,但在改變 values 代價會相較 mutable objects 多,因為會需要重新創造一個 object 出來。
舉例:
1 2 3 4 5 6 7 8 |
keyword_list = ["Life", "is", "short", ",", "I", "use", "Python"] context = "" for keyword in keyword_list: context += keyword + " " print(context) >>> Life is short , I use Python |
因為 string 是 Immutable objects 的特性,修改 context 的值時都會重新創建一個 context 出來,所以在 for 迴圈中會創造出 N 個 context 物件。
在了解 Immutable objects 和 Mutable objects 的特性後,就會盡量避免這種寫法,可以改用 "".join()
的方法來減少創建出來的物件。
關於 Python 物件導向教學的延伸閱讀:
▍本站的其他 object 相關教學:
- [Python教學] 一切皆為物件,到底什麼是物件 Object ?
- [Python教學] 什麼是 Immutable & Mutable objects
- [Python教學] 物件導向 – 封裝 / 繼承 / 多型
- [Python教學] Class / Static / Abstract Method 初探
- [Python教學] @property 是什麼? 使用場景和用法介紹
- [Python教學] 裝飾詞原理到應用
▍本篇參考的文章: