可變與不可變

資料型態有所謂的 可變 以及 不可變

所謂的可變是指,該變數所參照的物件本身能否被改變。

我們先來看看整數:

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。所以我們說清單是可變的資料型態,當然字典也是。

results matching ""

    No results matching ""