理解Python的「變數」

2021-10-04 04:49:34 字數 805 閱讀 4327

和c的變數完全不同,c變數修改值位址是不會變的,即重寫了該變數名對應位址的儲存單元內的資料值。python**現x=10,意味著引用x指向了10(所以引用是啥)

實際上我也不清楚這裡所謂引用的實現到底是什麼,只知道x指向了存放10的儲存單元。然後,id(x)可以檢視到具體位址。

我個人的理解是,可變資料型別的物件往往會以其他物件的引用作為值的一部分。

我們假設有個可變型別物件的引用a,它以某物件引用x為部分值。修改x物件的值(whatever,x的指向改變or不改變都可),那麼a物件的值發生了改變,但是,a並沒有改變指向,改變指向的應該是x(or x的值中的引用)

以list為例

不可變呢?

不以其他物件引用為值的一部分,比如數字,字串(python裡面的字串又和c,c++不一樣了orz據說python沒有區別於字串的字元概念,所以無法利用索引啥的去呼叫字串中的單個字元)

還有就是不可修改值的型別,比如tuple。因為tuple和list一樣儲存的是引用,而tuple不允許修改值,所以想要得到乙個不一樣的引用(?)只能修改指向了。

從宣告了b的地方看起。

b是(1,2,3),但我想讓b為(10,2,3)

嘗試修改b[0]=10,慘遭無情報錯。

行吧,我就令b指向乙個新tuple(10,2,3)

前後id(b)改變。

python 變數賦值的理解

一 再看python 基礎教程,裡面講 x 3 這種賦值。兩種解釋 第1種說法是把3 賦值給x,和c 一樣。第2中說法是把x 繫結到值 或者物件 3 上面。這種區別像是誰先存在記憶體中。我覺得第二種說法更好,體現了pyhton 無處不物件的原則。另外getrefcount 也體現了這點。二1 imp...

python變數高階(理解)

在python中 注意 如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用 在python中,變數的名字類似於便簽紙貼在資料上 圖示 a 1 圖示 a 2 圖示 b a 變數b是第 2 個貼在數字2上的標籤 在python中,函式的實參 返回值都是是靠引用來傳遞來的 def tes...

Python變數高階(理解)

在python中 注意 如果變數已經被定義,當給乙個變數賦值的時候,本質上是修改了資料的引用 在python中,函式的實參 返回值都是是靠引用來傳遞來的 def test num print 50 print d 在函式內的記憶體位址是 x num,id num result 100print 返回...