可變與不可變
資料型態有所謂的 可變 以及 不可變。
所謂的可變是指,該變數所參照的物件本身能否被改變。
我們先來看看整數:
a = 1
a = 2
還記得物件參照的概念嗎? a
這個變數並非容器本身,他是先參照到 1
,再參照到 2
,裝載 1
的容器跟裝載 2
的容器是不同的,他改變了標籤上的位置,但是參照到的物件本身並沒有改變,變的是參照的對象。
除了整數之外,浮點數及字串也是不可變的,我們可以簡單的試驗:
string = 'abc'
string[1] = 'x'
TypeError
我們發現要去更動字串的內容是不可能的,因為他參照到的東西不可變。
再看一個例子:
string = 'abc'
string = 'x'
為什麼這樣不會有錯呢?因為我們並沒有去更動不可變的資料,我們更動的是變數的參照物(就跟整數一樣)。
同樣的,我們來看看清單:
lst = [1, 2, 3]
lst[1] = 0
這樣就是完全合法的代碼,那是因為 lst
其實就是一系列的物件參照(標籤),標籤自然是可以改的,當我們寫出lst[1] = 0
的時候,只是將 lst
參照的第二張標籤參照的對象從 2
改為 0
。所以我們說清單是可變的資料型態,當然字典也是。