當(dāng)引?計數(shù)為0時窥岩,該對象?命就結(jié)束了甲献。
引?計數(shù)機(jī)制的優(yōu)點:
1、簡單
2颂翼、實時性:?旦沒有引?晃洒,內(nèi)存就直接釋放了。不?像其他機(jī)制等到特定時機(jī)朦乏。實時性還帶來?個好處:處理回收內(nèi)存的時間分?jǐn)偟搅似綍r球及。
引?計數(shù)機(jī)制的缺點:
1、維護(hù)引?計數(shù)
2呻疹、消耗資源循環(huán)引?
list1??? =???[]
list2??? =???[]
list1.append(list2)
list2.append(list1)
list1與list2相互引?吃引,如果不存在其他對象對他們的引用,list1與list2的引用計數(shù)也仍然1,所占?的內(nèi)存永遠(yuǎn)無法被回收镊尺,這將是致命的朦佩。?對于如今的強(qiáng)?硬件,缺點1尚可接受庐氮,但是循環(huán)引?導(dǎo)致內(nèi)存泄露语稠,注定python還將引?新的回收機(jī)制。(分代收集)
?.垃圾回收機(jī)制
Python中的垃圾回收是以引用計數(shù)為主弄砍,分代收集為輔仙畦。
1、導(dǎo)致引用計數(shù)+1的情況
對象被創(chuàng)建音婶,例如a=23??????
?對象被引?慨畸,例如b=a???
對象被作為參數(shù),傳?到?個函數(shù)中衣式,例如func(a)???????
對象作為?個元素先口,存儲在容器中,例如list1=[a,a]???
2瞳收、導(dǎo)致引用計數(shù)-1的情況
對象的別名被顯式銷毀,例如del??? a??????
?對象的別名被賦予新的對象厢汹,例如a=24???
?個對象離開它的作?域螟深,例如f函數(shù)執(zhí)?完畢時,func函數(shù)中的局部變量(全局變量不會)???
對象所在的容器被銷毀烫葬,或從容器中刪除對象???
3界弧、查看一個對象的引用計數(shù)
import??? sys
a??? =?"hello??? world"
?sys.getrefcount(a)
可以查看a對象的引用計數(shù),但是?正常計數(shù)?1搭综,因為調(diào)?函數(shù)的時候傳入a垢箕,這會讓a的引用計數(shù)+1
4.有三種情況會觸發(fā)垃圾回收:
當(dāng)gc模塊的計數(shù)器達(dá)到閥值的時候,自動回收垃圾
調(diào)?gc.collect()兑巾,手動回收垃圾
程序退出的時候条获,python解釋器來回收垃圾