python內(nèi)存管理
主要內(nèi)容
- 變量不需要聲明
- 變量不需要指定類型
- 程序員不用關(guān)心內(nèi)存管理
- 變量名會(huì)被“回收”
- del語(yǔ)句能夠直接釋放資源
動(dòng)態(tài)類型
python語(yǔ)言中眼俊,對(duì)象的類型和內(nèi)存占用都是運(yùn)行時(shí)確定的车摄,在創(chuàng)建賦值的時(shí)候,解釋器會(huì)根據(jù)語(yǔ)法和右側(cè)的操作數(shù)來(lái)決定新對(duì)象的類型。在創(chuàng)建對(duì)象后豪硅,一個(gè)該對(duì)象的應(yīng)用會(huì)被賦值給左側(cè)的變量。
內(nèi)存分配
python解釋器承擔(dān)了內(nèi)存管理的復(fù)雜任務(wù)
引用計(jì)數(shù)
#####引用計(jì)數(shù)加1
當(dāng)對(duì)象被創(chuàng)建并賦值給變量時(shí),對(duì)象的引用計(jì)數(shù)就被設(shè)置為1
當(dāng)同一個(gè)對(duì)象被創(chuàng)建并將其賦值給另外其他變量時(shí),則該引用計(jì)數(shù)再加1
(同理 作為參數(shù)傳遞給函數(shù)畅铭,方法或者類的實(shí)例,改對(duì)象的引用計(jì)數(shù)加1)
#####引用計(jì)數(shù)減1
當(dāng)對(duì)象的引用被銷毀時(shí)勃蜘,引用計(jì)數(shù)會(huì)減小硕噩。比如函數(shù)運(yùn)行結(jié)束時(shí),所有的局部變量都被自動(dòng)銷毀缭贡,對(duì)象的引用計(jì)數(shù)也就隨之減少
顯示銷毀對(duì)象
del (對(duì)象名)
del語(yǔ)句:
del一個(gè)對(duì)象炉擅,會(huì)將在線的名稱空間洪的對(duì)象刪除,并且賦值給該對(duì)象的對(duì)象的引用計(jì)數(shù)減1
垃圾收集
不再使用的內(nèi)存會(huì)被一種叫做垃圾收集的機(jī)制釋放匀归。解釋器負(fù)責(zé)跟蹤對(duì)象的引用計(jì)數(shù)坑资,垃圾回收器負(fù)責(zé)釋放內(nèi)存。垃圾回收器是一塊獨(dú)立的代碼穆端,他用來(lái)尋找引用計(jì)數(shù)為0的對(duì)象,特殊的場(chǎng)景下會(huì)出現(xiàn)循環(huán)引用仿便。
關(guān)于循環(huán)引用
一個(gè)循環(huán)引用發(fā)生的條件:至少兩個(gè)對(duì)象相互引用時(shí)体啰,也就是所有引用都消失時(shí)攒巍,這些引用仍然存在。這說(shuō)明只靠引用計(jì)數(shù)是不夠的荒勇。
python中的垃圾回收器包含兩個(gè)部分:一個(gè)引用計(jì)數(shù)器和一個(gè)循環(huán)垃圾回收器柒莉。
+當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)為0時(shí),解釋器會(huì)暫停沽翔,釋放這個(gè)對(duì)象和僅有這個(gè)對(duì)象可訪問(wèn)的其他對(duì)象
+循環(huán)垃圾回收器負(fù)責(zé)哪些分配總量很大的兢孝,未能通過(guò)引用計(jì)數(shù)銷毀的哪些對(duì)象
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者