02 Python 基礎教學10 所有文章

[Python 基礎教學] 什麼是 Immutable & Mutable objects

什麼是mutable物件_Max行銷誌

一. 什麼是 Immutable objects

如果物件被創造出來後,其 value 沒辦法被改變,稱之為 Immutable objects。

常見的 Immutable objects 的型態,像是 int, float, string, tuple。

以 int 型態為舉例:

Immutable object
Immutable object
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 型態為舉例:

mutable object - list
mutable object – list

首先我們寫了 a = [1,2],會創造出一個 list 型態的物件並將 a 指向他,而他的記憶體位置是 4339561600,當我們修改這個 list 新增一個 3 進去時 a.append(3),可以看到修改後記憶體位置不變。

三. 了解為 Immutable 和 Mutable 有什麼好處?

Immutable objects 在讀取和儲存時比較有效率,但在改變 values 代價會相較 mutable objects 多,因為會需要重新創造一個 object 出來。

舉例:

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 相關教學:

▍本篇參考的文章:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *