在進入主題之前,我們先來看一下下面這段文字,對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型別是這...