python中可變資料型別和不可變資料型別(詳解)

2021-10-05 12:15:49 字數 2447 閱讀 6126

以下所有的內容都是基於記憶體位址來說的。

可變資料型別:變數引用的資料型別,在更改數值的時候,存在不開闢新記憶體 的行為,此資料型別為可變資料型別。

不可變資料型別 :變數引用的資料型別,在更改數值的時候,不存在不開闢新記憶體 的行為,此資料型別為不可變資料型別。

在 python 中,strings, tuples, 和 numbers不可更改的物件,而list,dict等則是可以修改的物件。根據結論,閱讀下面解析。

更改值,開闢新記憶體

**:

num = 1

print(id(num))

num = 2

print(id(num))

結果: 

140706618831104

140706618831136

分析:下圖中紅色框代表裡面的內容不可更改

更改值,開闢新記憶體

**:

string = 'a'

print(id(string))

string = 'b'

print(id(string))

結果:

2793695685168

2793695653232

分析:

更改值,不開闢新記憶體

**:

list = ['a','b','c','d','e','f','g']

print(id(list))

list[1] = 'w'

print(id(list))

print(list)

結果:

1490101031496

1490101031496

['a', 'w', 'c', 'd', 'e', 'f', 'g']

分析:

更改值,開闢新記憶體

**:

list = ['a','b','c','d','e','f','g']

print(id(list))

list = (1,2,3,4,5,6)

print(id(list))

結果:

2123071902280

2123073209064

分析:

更改值,不開闢新記憶體   ——> 報錯,不能修改  ——>   假設不成立

**:

tup = ('a','b','c','d','e','f','g')

print(id(tup))

tup[1] = 'w'

print(id(tup))

print(tup)

結果:報錯

2210815038744

traceback (most recent call last):

file "e:/pythontest/test.py", line 3, in tup[1] = 'w'

typeerror: 'tuple' object does not support item assignment

分析:

更改值,開闢新記憶體

tup = ('a','b','c','d','e','f','g')

print(id(tup))

tup = (1,2,3,4,5,6)

print(id(tup))

結果:

2444846585112

2444846514920

分析:

同「列表」,略

同「列表」,略

python 可變資料型別和不可變資料型別

不可變資料型別更改後位址發生變化,可變資料型別更改後位址不發生變化。看 說話 a 1 int b string string c 1,2 tuple print type a id a print type b id b print type c id c a 1b 1 c 3 4 print a,...

Python 可變資料型別和不可變資料型別

python的資料儲存在記憶體裡,該資料分為可變資料型別和不可變資料型別 不可變資料型別 字串,數字,元祖 可變資料型別 列表,字典,集合 nums 1 2,3 nums bk nums nums 0 0print nums nums print nums bk nums bk print form...

python 可變資料型別 不可變資料型別

在python中,資料型別分為可變資料型別和不可變資料型別,不可變資料型別包括string,int,float,tuple,可變資料型別包括list,dict。所謂的可變與不可變,舉例如下 a test print a 0 t a 0 1 traceback most recent call las...