首頁 >後端開發 >Python教學 >圖解Python變數與賦值

圖解Python變數與賦值

不言
不言原創
2018-04-23 16:05:571656瀏覽

這篇文章主要介紹了圖解Python變數與賦值,現在分享給大家,也給大家做個參考。一起過來看看吧

Python是一門獨特的語言,與C語言有很大區別,初學Python很多萌新表示對變量與賦值不理解,這裡就大家介紹一下,需要的朋友可以參考下

Python是一門獨特的語言,與C語言有很大區別,初學Python很多萌新表示對變數與賦值不理解,學過C的都知道,給變數賦值時,需要先指定資料類型,同時會開啟一塊記憶體區域,用於儲存值,例如:


#
int a = 1;


圖解Python變數與賦值

a 是記憶體空間中的一小塊區域,就像是一個大房間裡面的一個小盒子,賦值就是把整數1裝載到盒子裡面。

現在給變數a重新賦值


a = 2;


圖解Python變數與賦值2

#盒子還是那個盒子,也就是說記憶體位址沒有變,只是該段記憶體中的值變了,變成了2。

再來看:


int b = a;


圖解Python變數與賦值3

#當把變數a賦值給另外一個變數b時,相當於把值拷貝了一份傳遞給變數b,b是新開闢的一段記憶體區域

而在Python中,「變數」的嚴格叫法是「名字(name) ”,也可以理解為標籤,就像我們人的名字一樣,名字就是掛在人身上的一個標籤。


>>> 10-a
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name &#39;a&#39; is not defined


例如上面這段錯誤的是name 'a' 沒有定義,而沒有說是 variable。

在Python中,給變數賦值就是相當於給物件貼標籤,就像我們給人取名字一樣,變數本身是沒有任何意義的,它沒有類型訊息,真正的訊息都在物件身上。

例如:


a = 1


圖解Python變數與賦值

Python內部首先會分配一段記憶體空間用於建立整數物件1,然後給這個1貼上名為a的標籤。

然後執行


a=2


#Python接著會在另一塊記憶體區域創建整數物件2,然後把標籤a從1身上撕下來貼在2身上,此時,我們沒辦法再透過a來得到1這個值了。

圖解Python變數與賦值

現在把名字a賦值給另外一個名字b


#
b = a


圖解Python變數與賦值

相當於在剛才的2身上又貼了一個新的標籤b,注意,這裡和C語言是完全不一樣的,定義b的時候不需要分配記憶體空間,這樣我們既可以透過a來訪問2也可以透過b來訪問2,訪問的都是同一個對象,就好比我們給寶寶取名時既有小名也有大名,其實叫的都是同一個人。

雖然我們通常在Python中還是用"變數"的叫法(因為在程式語言中這是一種通用叫法),但是我們需要理解Python中的變數不同於其他語言,變數只是一個名字。

理解了Python中的變數與賦值後,再來看函數的參數傳遞,如下所示:


>>> def fun_a(a):
...   a = a+4
...
>>> g = 0
>>> fun_a(g)
>>> g
0


全域變數g傳遞給函數fun_a時,相當於函數中的參數a也將作為標籤貼在0上,隨後a被重新賦值了(a=a 4),相當於從0撕下標籤a貼到4身上,然後g依然還是0上面的標籤。

圖解Python變數與賦值

再來看這個函數,傳遞的是一個列表物件


>>> def fun_b(names):
...   names[0] = [&#39;x&#39;, &#39;y&#39;]
...
>>> n_list = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;]
>>> fun_b(n_list)
>>>
>>> n_list
[[&#39;x&#39;,&#39;y&#39;], &#39;b&#39;, &#39;c&#39;]


與前面的步驟還是一樣的,names 和n_list 都是['a','b','c']上的一個標籤,只是列表中的第0個元素被重新賦值了,但是names和n_list 依然都貼在這個列表物件身上,雖然n_list的值更新了,但物件還是原來那個物件。就好比張三和小張都是同一個人,現在給小張換件衣服時,其實就是給張三換件衣服,人還是那個人,只是它身上的東西發生了變化。

圖解Python變數與賦值

相關推薦:

Python變數賦值的步奏詳解

Python變數與賦值的圖文詳解


#

以上是圖解Python變數與賦值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn