資料型別的可變與不可變

2021-09-14 08:28:43 字數 2018 閱讀 2495

在進入主題之前,我們先來看一下下面這段文字,對python核心型別是否「可變」有乙個基礎的印象。

• 數字 —— 不可變

• 列表 —— 有序、可變

• 元組 —— 有序、不可變

• 字串 —— 無序、可變

• 字典 —— 無序、可變

• 集合 —— 有序、不可變

➢ 變數其實就是乙個指標,指標的內容是乙個儲存位址

(address),指向相對應的值所在的儲存塊。

➢ 「=」表示賦值(assignment)

注意: python採用的是基於值的記憶體管理方式,如果為不同變數賦值為相同值(僅適用於-5至256的整數和短字串),

這個值在記憶體中只有乙份,多個變數指向同一塊記憶體位址。

>>> a = [1,2,3]

>>> b = [1,2,3]

>>> a == b

true

>>> id(a) == id(b)

false

>>> id(a[0]) == id(b[0])

true

>>> id(a[1]) == id(a[2])

false

>>> s1 = "helloworld"

>>> s2 = "helloworld"

>>> id(s1)

1935162035120

>>> id(s2)

1935162035120

增強賦值語句

➢ 對於不可變變數來說,a += b其實就等價於a = a + b,

➢ 但是對於可變變數來說,a += b是直接在原值的基礎上做修

改。可變物件是指通過增強賦值語句「+=」或方法等直接對變數所指物件進行修改操作時,既不會報錯,同時變數位址也不會發生變化,而不可變物件就會報錯或位址發生變化。

>>> list_1 = [1,2,3,4,5]       ####  列表為可變物件

>>> id(list_1)

1935161805128

>>> list_1[1] = 9

>>> list_1

[1, 9, 3, 4, 5]

>>> id(list_1)

1935161805128

>>> list_1 += [23]

>>> print(list_1)

[1, 9, 3, 4, 5, 23]

>>> id(list_1)

1935161805128

>>> id(s)

1935193380088

>>> s = s.replace("you","us")

>>> print(s)

>>> id(s)

1935193380016

>>> s += " yh"

>>> id(s)

1935193183456

>>> print(s)

some_tuple = ([1],2,3)       ### 元組為不可變物件

>>> id(some_tuple)

1935193231648

>>> some_tuple[0] += [2] ### 報錯

traceback (most recent call last):

file "", line 1, in typeerror: 'tuple' object does not support item assignment

例如列表,我們都知道,列表是可變物件,所以我們可以通過多種方法對其進行元素新增操作。

對列表進行新增元素的方法總結

除list.copy( ) 外, 列表方法均不會改變列表的id, 也不會新建列表

Python 資料型別的不可變與可變

資料不可變型別 int string tuple 可變型別 list dict set 利用id 製作測試 a 1 print id a a 2 print id a b 1,2,3,4 print id b print id b 輸出 10914496 10914528 1402796181591...

可變資料型別與不可變資料型別

可變資料型別 資料更改前後,記憶體id不變 列表,字典,集合 不可變資料型別 資料更改前後,記憶體id發生改變 數字 包括 整型,浮點型 字串,元組 分別對各種資料型別進行驗證 數字 int float 不可變資料型別 資料型別是不允許改變的,這就意味著如果改變量字資料型別的值,將重新分配記憶體空間...

Python 可變與不可變資料型別

可變資料型別有 list和dict 不可變資料型別有 int,float,string和tupe 對於不可變資料型別 不允許值發生變化,如果改變了變數的值,必然會建立新的物件 小整數和string型別不適用 對於值相同的變數指向的記憶體位址是同乙個 對於string型別和256範圍內的int型別是這...