圖解Python變量與賦值
Python是一門獨(dú)特的語言,與C語言有很大區(qū)別,初學(xué)Python很多萌新表示對變量與賦值不理解,學(xué)過C的都知道,給變量賦值時(shí),需要先指定數(shù)據(jù)類型,同時(shí)會開辟一塊內(nèi)存區(qū)域,用于存儲值,例如:
int a = 1;
a 就是內(nèi)存空間中的一小塊區(qū)域,就像是一個(gè)大房間里面的一個(gè)小盒子,賦值就是把整數(shù)1裝載到盒子里面。
現(xiàn)在給變量a重新賦值
a = 2;
盒子依然是那個(gè)盒子,也就是說內(nèi)存地址沒有變,只是該段內(nèi)存中的值變了,變成了2。
再來看:
int b = a;
當(dāng)把變量a賦值給另外一個(gè)變量b時(shí),相當(dāng)于把值拷貝了一份傳遞給變量b,b是新開辟的一段內(nèi)存區(qū)域
而在Python中,“變量”的嚴(yán)格叫法是“名字(name)”,也可以理解為標(biāo)簽,就像我們?nèi)说男彰粯?,名字就是掛在人身上的一個(gè)標(biāo)簽。
>>> 10-a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
比如上面這段錯(cuò)誤報(bào)的是name 'a' 沒有定義,而沒有說成 variable。
在Python中,給變量賦值就是相當(dāng)于給對象貼標(biāo)簽,就像我們給人取名字一樣,變量本身是沒有任何意義的,它沒有類型信息,真正的信息都在對象身上。
例如:
a = 1
Python內(nèi)部首先會分配一段內(nèi)存空間用于創(chuàng)建整數(shù)對象1,然后給這個(gè)1貼上名為a的標(biāo)簽。
然后執(zhí)行
a=2
Python接著會在另一塊內(nèi)存區(qū)域創(chuàng)建整數(shù)對象2,然后把標(biāo)簽a從1身上撕下來貼在2身上,此時(shí),我們沒法再通過a來得到1這個(gè)值了。
現(xiàn)在把名字a賦值給另外一個(gè)名字b
b = a
相當(dāng)于在剛才的2身上又貼了一個(gè)新的標(biāo)簽b,注意,這里和C語言是完全不一樣的,定義b的時(shí)候不需要分配內(nèi)存空間,這樣我們既可以通過a來訪問2也可以通過b來訪問2,訪問的都是同一個(gè)對象,就好比我們給寶寶取名時(shí)既有小名也有大名,其實(shí)叫的都是同一個(gè)人。
雖然我們通常在Python中還是用"變量"的叫法(因?yàn)樵诰幊陶Z言中這是一種通用叫法),但是我們需要理解Python中的變量不同于其他語言,變量只是一個(gè)名字。
理解了Python中的變量與賦值后,再來看函數(shù)的參數(shù)傳遞,如下所示:
>>> def fun_a(a): ... a = a+4 ... >>> g = 0 >>> fun_a(g) >>> g 0
全局變量g傳遞給函數(shù)fun_a時(shí),相當(dāng)于函數(shù)中的參數(shù)a也將作為標(biāo)簽貼在0上,隨后a被重新賦值了(a=a+4),相當(dāng)于從0撕下標(biāo)簽a貼到4身上,然后g依然還是0上面的標(biāo)簽。
再來看這個(gè)函數(shù),傳遞的是一個(gè)列表對象
>>> def fun_b(names): ... names[0] = ['x', 'y'] ... >>> n_list = ['a','b','c'] >>> fun_b(n_list) >>> >>> n_list [['x','y'], 'b', 'c']
與前面的步驟還是一樣的,names 和 n_list 都是['a','b','c']上的一個(gè)標(biāo)簽,只是列表中的第0個(gè)元素被重新賦值了,但是names和 n_list 依然都貼在這個(gè)列表對象身上,雖然 n_list的值更新了,但對象依然是原來那個(gè)對象。就好比張三和小張都是同一個(gè)人,現(xiàn)在給小張換件衣服時(shí),其實(shí)就是給張三換件衣服,人還是那個(gè)人,只是它身上的東西發(fā)生了變化。
以上內(nèi)容就介紹到這,大家可以繼續(xù)看下面的相關(guān)文章。
相關(guān)文章
python 執(zhí)行文件時(shí)額外參數(shù)獲取的實(shí)例
今天小編就為大家分享一篇python 執(zhí)行文件時(shí)額外參數(shù)獲取的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)的解決方法詳解
這篇文章主要為大家詳細(xì)介紹了Python使用moviepy讀取字幕srt文件報(bào)錯(cuò)‘gbk‘?codec?can‘t?decode的兩種解決辦法,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01如何在Python?中使用?join()?函數(shù)把列表拼接成一個(gè)字符串
這篇文章主要介紹了如何在Python?中使用?join()?函數(shù)把列表拼接成一個(gè)字符串,文章圍繞?join()?函數(shù)的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對你有幫助2022-03-03Python基于scrapy采集數(shù)據(jù)時(shí)使用代理服務(wù)器的方法
這篇文章主要介紹了Python基于scrapy采集數(shù)據(jù)時(shí)使用代理服務(wù)器的方法,涉及Python使用代理服務(wù)器的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04用python3讀取python2的pickle數(shù)據(jù)方式
今天小編就為大家分享一篇用python3讀取python2的pickle數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12用Pycharm實(shí)現(xiàn)鼠標(biāo)滾輪控制字體大小的方法
今天小編就為大家分享一篇用Pycharm實(shí)現(xiàn)鼠標(biāo)滾輪控制字體大小的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python中關(guān)于集合的介紹與常規(guī)操作解析
Python除了List、Tuple、Dict等常用數(shù)據(jù)類型外,還有一種數(shù)據(jù)類型叫做集合(set),集合的最大特點(diǎn)是:集合里邊的元素是不可重復(fù)的并且集合內(nèi)的元素還是無序的2021-09-09