1. 程式人生 > >Python經驗主義學習之路——可變物件和不可變物件

Python經驗主義學習之路——可變物件和不可變物件

可變物件與不可變物件

資料型別和變數

Python的資料型別和C++幾乎相同,但是變數的概念和C++/C目前來看有一點差別(但在彙編的角度上看,和彙編中的變數概念差不多),在C/C++中,我們可以把變數在邏輯上抽象成一個帶有名字的盒子,如下簡單程式碼。
int main(void){
    int a;
    a = 5;
    a  = 6;
}


其中a相當於一個可以存放資料的盒子,在高階的邏輯層面上,可以這麼認為,在記憶體中建立了個叫 a 的盒子,這是盒子裡是空的(任意的),之後在裡面放入了5,之後又將6放入盒中,覆蓋了5。但是在彙編層面上a其實是一個地址。
在Python中,變數a 就是一個名字,一個指標。該指標指向了一個物件。在Python中我目前是這樣理解的一個物件是特定地址的資料,資料型別這個概念是對於變數指向的物件來說的(只有物件才有資料型別這個概念)。比如 5 這個 a指向的物件是 int型別,6這個a指向的物件是int型,而不是說 a 是int 型,a只是一個變數,只是一個指標而已。

list 和 tuple認識可變物件和不可變物件

接著上文。可變或者不可變是對於 一個記憶體中建立的物件來說的,一個確定的變數 有兩種分類,一類為 可變物件。一類為不可變物件。不可變物件 物件佔據的記憶體空間中的內容不可變。比如5在5的房間裡永遠為5,不能變6或者‘abc'。看下面的Python程式碼。
a = 5 ; 
a = 'abc'

a開始指向了5,之後又指向了'abc',似乎a變了,但是記憶體中的 5 , abc本身的內容並沒有發生改變。 關於 list 和 tuple 的探討。詳見 點選開啟連結 其中,list和tuple作為複合物件, l其中List為可變物件,tuple為不可變物件。list和tuple的實質是裝著記憶體地址,說他們變或者不變實質是指向的變或者不變。但他們指向的內容變或者不變就是另一回事情了。