python基礎(chǔ)之變量與內(nèi)存管理方式
一、變量的定義
? 變量指的就是隨時(shí)可變化的量,量通??梢灾笇?shí)物的狀態(tài)(比如:大樹的高度、人的年齡等)。
變量的組成通常為:變量名、變量值組成。變量名需要保持唯一性,通過變量名即可以找到對應(yīng)數(shù)據(jù)。
變量允許被多次更改,在程序運(yùn)行過程中,實(shí)際就是一系列變量值的變化。
二、變量的賦值
將數(shù)據(jù)放入變量的過程叫做賦值,賦值符號為:“=”。
變量的定義方式為:name=value。在強(qiáng)類型的編程語言中,定義變量時(shí)要指明變量的類型,python是弱類型語言,不需要事先聲明變量類型
弱類型語言有兩個(gè)特點(diǎn):
- ? 變量無須聲明就可以直接賦值對一個(gè)不存在的變量賦值就相當(dāng)于定義了一個(gè)新變量。
- ? 變量的數(shù)據(jù)類型可以隨時(shí)改變比如,同一個(gè)變量可以先被賦值為整數(shù),再次被賦值為字符串。
test = 123 test = 12.30 test = "test"
三、變量的使用原則
使用原則:先定義,后引用
如果未定義時(shí)直接引用,會報(bào)錯(cuò),比如:未定義變量a,直接打印變量值,則會直接提示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í)盡量做到見名知意
如果變量名沒有意義,在代碼量大時(shí),自己或別人無法直觀的清楚這個(gè)變量的含義。
原則2:變量名的由字母數(shù)字下劃線組成
在字母中,純大寫一般標(biāo)識常量,所以一般用小寫標(biāo)識變量,另外不要用拼音、漢字作為變量,雖然可以使代碼運(yùn)行,但是很不專業(yè)
原則3:變量名不能由數(shù)字開頭
原則4:變量名不能使用python內(nèi)置關(guān)鍵詞
? 如:break、print、if……,當(dāng)使用內(nèi)置關(guān)鍵詞做變量時(shí),你的變量會覆蓋原有功能,使之不能使用
五、變量的內(nèi)存管理
變量在進(jìn)行賦值時(shí),就是在內(nèi)存開辟一個(gè)空間,把內(nèi)存空間的地址捆綁給了變量名,我們通過變量名就可以找到這個(gè)對應(yīng)值。定義變量會占用內(nèi)存空間,對于計(jì)算機(jī)而言,內(nèi)存的總量是有限的,而且內(nèi)存也不是只服務(wù)于這一個(gè)程序,還有很多程序也需要使用,所以,當(dāng)定義的變量不使用后需要把對應(yīng)的內(nèi)存空間給釋放出去。否則申請了內(nèi)存空間又不使用,就是在浪費(fèi)內(nèi)存空間。當(dāng)未被釋放的內(nèi)存太多,把可用內(nèi)存全部裝滿后,就會導(dǎo)致內(nèi)存溢出。
在我們寫代碼時(shí),定義的變量在不使用后,進(jìn)行內(nèi)存空間釋放。這個(gè)過程就叫做內(nèi)存管理。但是內(nèi)存管理是一件非常繁瑣的事情,如果處理不恰當(dāng),就會導(dǎo)致程序崩潰。python推出了一個(gè)內(nèi)存管理機(jī)制,稱為垃圾回收機(jī)制(Garbage Collction,簡稱GC)。
當(dāng)內(nèi)存中的變量值地址沒有綁定任何變量名時(shí),無法通過變量名找到這個(gè)內(nèi)存地址時(shí),這個(gè)內(nèi)存地址占用就是垃圾。垃圾回收機(jī)制就是用來釋放這些沒有任何綁定關(guān)系的內(nèi)存地址。而這其中會涉及一個(gè)概念引用計(jì)數(shù),也就是內(nèi)存地址綁定的數(shù)量,如下:
a = 100 b = a c = a #定義變量a時(shí),此時(shí)對應(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對應(yīng)的內(nèi)存地址,引用計(jì)數(shù)變?yōu)? #當(dāng)abc的綁定關(guān)系都解除后,此時(shí)引用計(jì)數(shù)變?yōu)?,無法通過任何變量找到“test”這個(gè)內(nèi)存地址。此時(shí)“test”就被稱為垃圾。
python解釋器默認(rèn)的垃圾回收機(jī)制,在一直掃描內(nèi)存里面有沒有引用計(jì)數(shù)為0的,一旦發(fā)現(xiàn)存在,就會立即把這個(gè)內(nèi)存空間給回收掉。不需要我們進(jìn)行手動處理。
六、變量的特征
變量有兩個(gè)重要的特征,分別是id和type。
id反應(yīng)的就是根據(jù)變量值的內(nèi)存地址所計(jì)算出來的一個(gè)id號碼,注意:id不是內(nèi)存地址,是通過內(nèi)存地址計(jì)算出來的一個(gè)值,具有唯一性可以理解為內(nèi)存的映射。
type查看的是變量的類型,因?yàn)槭挛锏臓顟B(tài)是多樣的,而變量是存儲事物的狀態(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)文章
解決Pycharm雙擊圖標(biāo)啟動不了的問題(JetBrains全家桶通用)
這篇文章主要介紹了Pycharm雙擊圖標(biāo)啟動不了(JetBrains全家桶通用),本文給大家分享問題及解決方法,需要的朋友可以參考下2020-08-08
selenium XPath定位的實(shí)現(xiàn)示例
XPath是一種在XML文檔中定位和選擇節(jié)點(diǎn)的語言,通過路徑表達(dá)式遍歷XML樹,支持節(jié)點(diǎn)選取、字符串匹配、數(shù)值計(jì)算、邏輯運(yùn)算等功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
Python 正則表達(dá)式進(jìn)階用法之字符集與字符范圍詳解
本文詳細(xì)介紹了Python正則表達(dá)式中的字符集和字符范圍,包括字符集的基本概念、特殊字符、示例和注意事項(xiàng),通過這些進(jìn)階用法,我們可以更高效地處理復(fù)雜的文本模式,感興趣的朋友跟隨小編一起看看吧2024-11-11
linux環(huán)境下安裝pyramid和新建項(xiàng)目的步驟
這篇文章簡單介紹了linux環(huán)境下安裝pyramid和新建項(xiàng)目的步驟,大家參考使用2013-11-11
Python Pandas大數(shù)據(jù)處理性能優(yōu)化技巧(百萬級數(shù)據(jù)提速)
Pandas 在處理百萬級(甚至千萬級)數(shù)據(jù)時(shí),性能瓶頸非常明顯,這篇文章主要介紹了Python Pandas大數(shù)據(jù)處理性能優(yōu)化技巧,希望對大家有所幫助2026-01-01
Python獲取當(dāng)前時(shí)間日期的實(shí)現(xiàn)示例
本文主要介紹了Python獲取當(dāng)前時(shí)間日期,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
python實(shí)現(xiàn)修改xml文件內(nèi)容
這篇文章主要介紹了python實(shí)現(xiàn)修改xml文件內(nèi)容,XML 指可擴(kuò)展標(biāo)記語言,是一種標(biāo)記語言,是從標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)中簡化修改出來的2022-07-07
python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之多元線性回歸
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)機(jī)器學(xué)習(xí)之多元線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-09

