python基礎(chǔ)之變量與內(nèi)存管理方式
一、變量的定義
? 變量指的就是隨時(shí)可變化的量,量通??梢灾笇?shí)物的狀態(tài)(比如:大樹(shù)的高度、人的年齡等)。
變量的組成通常為:變量名、變量值組成。變量名需要保持唯一性,通過(guò)變量名即可以找到對(duì)應(yīng)數(shù)據(jù)。
變量允許被多次更改,在程序運(yùn)行過(guò)程中,實(shí)際就是一系列變量值的變化。
二、變量的賦值
將數(shù)據(jù)放入變量的過(guò)程叫做賦值,賦值符號(hào)為:“=”。
變量的定義方式為:name=value。在強(qiáng)類型的編程語(yǔ)言中,定義變量時(shí)要指明變量的類型,python是弱類型語(yǔ)言,不需要事先聲明變量類型
弱類型語(yǔ)言有兩個(gè)特點(diǎn):
- ? 變量無(wú)須聲明就可以直接賦值對(duì)一個(gè)不存在的變量賦值就相當(dāng)于定義了一個(gè)新變量。
- ? 變量的數(shù)據(jù)類型可以隨時(shí)改變比如,同一個(gè)變量可以先被賦值為整數(shù),再次被賦值為字符串。
test = 123 test = 12.30 test = "test"
三、變量的使用原則
使用原則:先定義,后引用
如果未定義時(shí)直接引用,會(huì)報(bào)錯(cuò),比如:未定義變量a,直接打印變量值,則會(huì)直接提示NameError: name xxx is not defined
In [1]: a=test
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-1-de92534033e7> in <module>()
----> 1 a=testNameError: name 'test' is not defined
In [2]: print(a)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-bca0e2660b9f> in <module>()
----> 1 print(a)NameError: name 'a' is not defined
四、變量命名規(guī)范
原則1:變量命名時(shí)盡量做到見(jiàn)名知意
如果變量名沒(méi)有意義,在代碼量大時(shí),自己或別人無(wú)法直觀的清楚這個(gè)變量的含義。
原則2:變量名的由字母數(shù)字下劃線組成
在字母中,純大寫(xiě)一般標(biāo)識(shí)常量,所以一般用小寫(xiě)標(biāo)識(shí)變量,另外不要用拼音、漢字作為變量,雖然可以使代碼運(yùn)行,但是很不專業(yè)
原則3:變量名不能由數(shù)字開(kāi)頭
原則4:變量名不能使用python內(nèi)置關(guān)鍵詞
? 如:break、print、if……,當(dāng)使用內(nèi)置關(guān)鍵詞做變量時(shí),你的變量會(huì)覆蓋原有功能,使之不能使用
五、變量的內(nèi)存管理
變量在進(jìn)行賦值時(shí),就是在內(nèi)存開(kāi)辟一個(gè)空間,把內(nèi)存空間的地址捆綁給了變量名,我們通過(guò)變量名就可以找到這個(gè)對(duì)應(yīng)值。定義變量會(huì)占用內(nèi)存空間,對(duì)于計(jì)算機(jī)而言,內(nèi)存的總量是有限的,而且內(nèi)存也不是只服務(wù)于這一個(gè)程序,還有很多程序也需要使用,所以,當(dāng)定義的變量不使用后需要把對(duì)應(yīng)的內(nèi)存空間給釋放出去。否則申請(qǐng)了內(nèi)存空間又不使用,就是在浪費(fèi)內(nèi)存空間。當(dāng)未被釋放的內(nèi)存太多,把可用內(nèi)存全部裝滿后,就會(huì)導(dǎo)致內(nèi)存溢出。
在我們寫(xiě)代碼時(shí),定義的變量在不使用后,進(jìn)行內(nèi)存空間釋放。這個(gè)過(guò)程就叫做內(nèi)存管理。但是內(nèi)存管理是一件非常繁瑣的事情,如果處理不恰當(dāng),就會(huì)導(dǎo)致程序崩潰。python推出了一個(gè)內(nèi)存管理機(jī)制,稱為垃圾回收機(jī)制(Garbage Collction,簡(jiǎn)稱GC)。
當(dāng)內(nèi)存中的變量值地址沒(méi)有綁定任何變量名時(shí),無(wú)法通過(guò)變量名找到這個(gè)內(nèi)存地址時(shí),這個(gè)內(nèi)存地址占用就是垃圾。垃圾回收機(jī)制就是用來(lái)釋放這些沒(méi)有任何綁定關(guān)系的內(nèi)存地址。而這其中會(huì)涉及一個(gè)概念引用計(jì)數(shù),也就是內(nèi)存地址綁定的數(shù)量,如下:
a = 100 b = a c = a #定義變量a時(shí),此時(shí)對(duì)應(yīng)的內(nèi)存地址引用計(jì)數(shù)為1,b也綁定的是同一個(gè)內(nèi)存地址,此時(shí)引用計(jì)數(shù)為2,同理綁定c后引用計(jì)數(shù)變?yōu)?。 # -------------------- del a #引用計(jì)數(shù)為2 del b #引用計(jì)數(shù)為1 c = 101 #當(dāng)重新綁定變量c的內(nèi)存地址后,因?yàn)楹筮\(yùn)行,所以變量值100對(duì)應(yīng)的內(nèi)存地址,引用計(jì)數(shù)變?yōu)? #當(dāng)abc的綁定關(guān)系都解除后,此時(shí)引用計(jì)數(shù)變?yōu)?,無(wú)法通過(guò)任何變量找到“test”這個(gè)內(nèi)存地址。此時(shí)“test”就被稱為垃圾。
python解釋器默認(rèn)的垃圾回收機(jī)制,在一直掃描內(nèi)存里面有沒(méi)有引用計(jì)數(shù)為0的,一旦發(fā)現(xiàn)存在,就會(huì)立即把這個(gè)內(nèi)存空間給回收掉。不需要我們進(jìn)行手動(dòng)處理。
六、變量的特征
變量有兩個(gè)重要的特征,分別是id和type。
id反應(yīng)的就是根據(jù)變量值的內(nèi)存地址所計(jì)算出來(lái)的一個(gè)id號(hào)碼,注意:id不是內(nèi)存地址,是通過(guò)內(nèi)存地址計(jì)算出來(lái)的一個(gè)值,具有唯一性可以理解為內(nèi)存的映射。
type查看的是變量的類型,因?yàn)槭挛锏臓顟B(tài)是多樣的,而變量是存儲(chǔ)事物的狀態(tài),比如:數(shù)字、字符串
In [3]: a=123 In [4]: b="str" In [5]: id(a) Out[5]: 9082880 In [6]: id(b) Out[6]: 139983741909344 In [7]: type(a) Out[7]: int In [8]: type(b) Out[8]: str
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一步步教你用python給女朋友寫(xiě)個(gè)微信自動(dòng)提醒的程序
如今微信已成為我們?nèi)粘I畹闹饕涣鞴ぞ?但是微信自身的功能有時(shí)候可能并不能滿足我們的需要,因此我們會(huì)想是否可以進(jìn)行微信功能的拓展呢,這篇文章主要給大家介紹了關(guān)于利用python給女朋友寫(xiě)了個(gè)微信自動(dòng)提醒程序的相關(guān)資料,需要的朋友可以參考下2021-10-10python web應(yīng)用程序之Django數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了python web應(yīng)用程序之Django數(shù)據(jù)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06python通過(guò)floor函數(shù)舍棄小數(shù)位的方法
這篇文章主要介紹了python通過(guò)floor函數(shù)舍棄小數(shù)位的方法,實(shí)例分析了Python中floor函數(shù)的功能及使用技巧,需要的朋友可以參考下2015-03-03使用Python創(chuàng)建簡(jiǎn)單的HTTP服務(wù)器的方法步驟
這篇文章主要介紹了使用Python創(chuàng)建簡(jiǎn)單的HTTP服務(wù)器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼
本文主要介紹了python調(diào)用文字識(shí)別OCR輕松搞定驗(yàn)證碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Python調(diào)整matplotlib圖片大小的3種方法匯總
我們?cè)谑褂胢atplotlib作圖時(shí),會(huì)遇到圖片不清晰或者圖片大小不是我們想要的,這個(gè)時(shí)候就需要調(diào)整下,這篇文章主要給大家介紹了關(guān)于Python調(diào)整matplotlib圖片大小的3種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08