python中哪些是可變數據類型,哪些是不可變數據類型。可變數據類型:列表list和字典dict;不可變數據類型:整型int、浮點型float、字符串型string和元組tuple。
我們可以使用:id()的方式進行查看(id()用來指出數據的內存地址)
不可變數據類型
例如:1 這個int類型的對象,我們通過輸出得到

那么,1 的內存地址為1663593952
此時我們定義一個變量,將1 作為對象賦值給它

如圖,變量a的引用了對象1的地址,此時a的內存地址也是1663593952
我們再進定義一個變量

此時,變量b也引用了對象1的地址,也就是說,所有引用對象1的變量,它們的內存地址都是1663593952。
那如果我們將變量引用的對象改為2呢,很明顯,它們的內存地址都會變成 2的內存地址,如下圖演示

a,b,c,d這些變量,只要是在引用同一個對象,那么它們的內存地址就都是這個對象的內存地址,內存地址是不變的,只會記錄有多少引用(也就是說圖中1663593984這個內存地址有4個引用,分別是a,b,c,d),而只有當它們引用其他對象 2 后,它們的內存地址才會指向新的內存地址(新對象的內存地址)那么此時 1的內存地址會被垃圾器回收。無論有多少個變量引用一個對象,內存地址都不會發生改變,只有在重新賦值后內存地址才會發生改變。
所以說不可變數據類型的優點就是內存中不管有多少個引用,相同的對象只占用了一塊內存,但是它的缺點就是當需要對變量進行運算從而改變變量引用的對象的值時,由於是不可變的數據類型,所以必須創建新的對象,這樣就會使得一次次的改變創建了一個個新的對象,不過不再使用的內存會被垃圾回收器回收。
我們再來看下可變數據類型:list
我們設定一個變量a,我們通過給a賦一樣的值,來查看它的內存地址,如圖:

從圖中我們可以看到,我先給a這個變量賦值了一個list,即a = [1,2,3,4,5,6] ,此時id(a) 得到的內存地址為1777391273992,也就是說對象[1,2,3,4,5,6]此時的內存地址為1777391273992。
那么我們再給a賦值一個list,還是[1,2,3,4,5,6],此時對象[1,2,3,4,5,6]的內存地址發生了改變1777391169608,其實第一次賦值和第二次賦值的[1,2,3,4,5,6],[1,2,3,4,5,6]它們不是同一個對象,它們只是值相同的兩個list,也就是說,我們是在給a創建了兩個值一樣的不同對象。如圖中所示,我們又對對象[1,2,3,4,5,6]進行了appeen等操作,也就是說對象[1,2,3,4,5,6]無論是變成了[1,2,3,4,5,6,7]還是變成了[1,2,3,4,5,6,7,2]。它都是原來的那個list,它的內存地址沒有發生改變,只是它的值發生了改變。
其實我們區分數據類型是可變還是不可變的,主要從區分開什么是變量值的變化,什么是變量引用的對象地址的變化這些概念,在多做一些實際操作就一目了然了。
此處記錄本人個人理解,本人也是從其他大神處學習並進行了實際操作得來的,可能說的不是很清晰,但只是作為個人理解的筆記。歡迎大神們指正錯誤,定認真閱讀參考!!
