內(nèi)存結(jié)構(gòu)中分棧區(qū)間和堆區(qū)間灭返,棧區(qū)間中內(nèi)存是系統(tǒng)自動(dòng)開啟自動(dòng)釋放晚吞。堆區(qū)間的內(nèi)存需要手動(dòng)申請(qǐng)手動(dòng)釋放劫侧。但是目前絕大部分編程語言,都提供了一套屬于自己的關(guān)于堆中的內(nèi)存的管理方案 厌漂。python中垃圾回收機(jī)制是用來管理堆中的內(nèi)存的釋放
python中的數(shù)據(jù)都是存在堆中的萨醒,數(shù)據(jù)的地址都是在棧區(qū)間。
1.內(nèi)存的開辟
python中將值賦給變量的是苇倡,會(huì)先在堆中開辟空間將數(shù)據(jù)存起來富纸,然后再數(shù)據(jù)對(duì)應(yīng)的地址返回給變量,存在棧中雏节。
但是如果數(shù)據(jù)是數(shù)字和字符串胜嗓,會(huì)先緩存區(qū)中查看這個(gè)數(shù)據(jù)之前是否已經(jīng)創(chuàng)建過高职,如果沒有就去創(chuàng)建空間存數(shù)據(jù)钩乍,然后將地址返回。
如果之前已經(jīng)創(chuàng)建過就直接將之前的地址返回
2.內(nèi)存的釋放 --> 垃圾回收機(jī)制
系統(tǒng)每隔一定的時(shí)間就會(huì)去檢測當(dāng)前程序中所有的對(duì)象的引用計(jì)數(shù)值是否為0怔锌;
如果對(duì)象的引用計(jì)數(shù)是0對(duì)象對(duì)應(yīng)的內(nèi)存就會(huì)被銷毀寥粹,如果不是0就不銷毀
3.引用計(jì)數(shù)
每一個(gè)對(duì)象都有引用計(jì)數(shù)屬性,用來存儲(chǔ)當(dāng)前對(duì)象被引用的次數(shù)埃元。
可以通過sys模塊中的getrefcount去獲取一個(gè)對(duì)象的引用計(jì)數(shù)值