python3中有六個標准的數據類型:number(數字型)、string(字符串型)、list(列表)、type(元祖)、dictionary(字典)、set(集合),其中不可變類型三個:number、type、stri;剩下的三個是可變數據類型。
0x01:不可變數據類型
對於判斷是否為可變數據類型,我們可以用id函數,它的作用是獲取對象的內存地址。假如我們寫了下面兩行代碼:
>>> a=5
>>> id(5)
1351465552
第一行聲明了一個number類型的變量,並給他賦值為5,第二行獲取到了a這個對象的內存地址。
下面我們改變一下a的值,在id一下試試:
>>> a=5 >>> id(5) 1351465552 >>> a=6 >>> id(a) 1351465584
可以看到當a的值被改變時,a這個number類對象的內存地址也發生了變化。也就是說,一個內存地址只能對應一個值,內存地址與值的對應關系是不能變的,這種叫不可變數據類型。同樣,字符串也是。
>>> s='qwer' >>> id(s) 2374200496792 >>> s='qwr' >>> id(s) 2374200498976
元祖里面的值不能被修改,所以也為不可變數據類型,但如果元祖里含有列表的話,列表里面的值可以被修改:
>>> t=(1,2,3,[4,5,6]) >>> t[3] [4, 5, 6] >>> t[3][1] 5 >>> t[3][1]=6 >>> t[3] [4, 6, 6]
0x02:可變數據類型
可變數據類型就是當對象的值改變是,對象的內存地址不會改變。用list試一下
>>> a=[4,5,6] >>> id(a) 2374200503880 >>> a[1] 5 >>> a[1]=6 >>> a[1] 6 >>> id(a) 2374200503880
但是你如果像下面這樣寫的話,那地址就會改變了。
>>> a=[1,2,3] >>> id(a) 2374200502984 >>> a=[4,5,6] >>> id(a) 2374200503880
因為這樣寫的話,就不是改變a的值了,此時的a已經不再是上面哪一個了,它是一個新的list對象
(ps:本人太菜,若有錯誤的地方歡迎大佬隨時責罵。。。。xixixii)