上一篇文章為:→1.2.8屬性property
垃圾回收
1. 小整數(shù)對(duì)象池
整數(shù)在程序中的使用非常廣泛殷费,Python為了優(yōu)化速度,使用了小整數(shù)對(duì)象池低葫, 避免為整數(shù)頻繁申請(qǐng)和銷(xiāo)毀內(nèi)存空間宗兼。
Python 對(duì)小整數(shù)的定義是 [-5, 257) 這些整數(shù)對(duì)象是提前建立好的,不會(huì)被垃圾回收氮采。在一個(gè) Python 的程序中,所有位于這個(gè)范圍內(nèi)的整數(shù)使用的都是同一個(gè)對(duì)象.
同理染苛,單個(gè)字母也是這樣的鹊漠。
但是當(dāng)定義2個(gè)相同的字符串時(shí),引用計(jì)數(shù)為0茶行,觸發(fā)垃圾回收
2. 大整數(shù)對(duì)象池
每一個(gè)大整數(shù)躯概,均創(chuàng)建一個(gè)新的對(duì)象。
3. intern機(jī)制
a1 = "HelloWorld"
a2 = "HelloWorld"
a3 = "HelloWorld"
a4 = "HelloWorld"
a5 = "HelloWorld"
a6 = "HelloWorld"
a7 = "HelloWorld"
a8 = "HelloWorld"
a9 = "HelloWorld"
python會(huì)不會(huì)創(chuàng)建9個(gè)對(duì)象呢畔师?在內(nèi)存中會(huì)不會(huì)開(kāi)辟9個(gè)”HelloWorld”的內(nèi)存空間呢娶靡? 想一下,如果是這樣的話(huà)看锉,我們寫(xiě)10000個(gè)對(duì)象姿锭,比如a1=”HelloWorld”…..a1000=”HelloWorld”, 那他豈不是開(kāi)辟了1000個(gè)”HelloWorld”所占的內(nèi)存空間了呢伯铣?如果真這樣呻此,內(nèi)存不就爆了嗎?所以python中有這樣一個(gè)機(jī)制——intern機(jī)制
腔寡,讓他只占用一個(gè)”HelloWorld”所占的內(nèi)存空間焚鲜。靠引用計(jì)數(shù)去維護(hù)何時(shí)釋放。
總結(jié)
小整數(shù)[-5,257)共用對(duì)象忿磅,常駐內(nèi)存
單個(gè)字符共用對(duì)象糯彬,常駐內(nèi)存
-
單個(gè)單詞,不可修改葱她,默認(rèn)開(kāi)啟intern機(jī)制撩扒,共用對(duì)象,引用計(jì)數(shù)為0览效,則銷(xiāo)毀
-
字符串(含有空格)却舀,不可修改,沒(méi)開(kāi)啟intern機(jī)制锤灿,不共用對(duì)象挽拔,引用計(jì)數(shù)為0,銷(xiāo)毀
-
大整數(shù)不共用內(nèi)存但校,引用計(jì)數(shù)為0螃诅,銷(xiāo)毀
-
數(shù)值類(lèi)型和字符串類(lèi)型在 Python 中都是不可變的,這意味著你無(wú)法修改這個(gè)對(duì)象的值状囱,每次對(duì)變量的修改术裸,實(shí)際上是創(chuàng)建一個(gè)新的對(duì)象