2019-01-14 day16 !!!python內(nèi)存管理

內(nèi)存管理

1.數(shù)據(jù)的存儲

內(nèi)存分為棧區(qū)間和堆區(qū)間;從底層來看,棧區(qū)間的內(nèi)存的開辟和釋放是系統(tǒng)自動管理的,堆區(qū)間的內(nèi)存是由程序員通過代碼開辟(malloc)和釋放的
                        從python語言角度,棧區(qū)間的內(nèi)存的開辟和釋放是系統(tǒng)自動管理的,堆區(qū)間的內(nèi)存管理也已經(jīng)封裝好了,
                        程序員也不需要寫代碼來開辟空間和釋放空間
                        
a.python中變量本身是存在棧區(qū)間的,函數(shù)調(diào)用過程是在棧區(qū)間;所有對象都是存在堆區(qū)間(python中所有數(shù)據(jù)都是對象)
b.變量賦值過程:先在堆區(qū)間開辟空間將數(shù)據(jù)存起來,然后將數(shù)據(jù)對應(yīng)的地址存到棧區(qū)間的變量中。
                數(shù)字和字符串比較特殊,賦值的時候不會直接開辟空間,而是先檢測之前有沒有存儲過這個數(shù)據(jù),
                如果有就用之前的數(shù)據(jù)的地址

2.內(nèi)存釋放(垃圾回收機制)原理:

python中的每個對象都有一個屬性叫'引用計數(shù)',表示當(dāng)前對象的引用的個數(shù)。判斷一個對象是否銷毀就看對象的引用計數(shù)是否為0;
為0的就銷毀,不為0就不銷毀。


getrefcount函數(shù):
getrefcount(對象)  -> 獲取對象的引用計數(shù)
from sys import getrefcount


def main():
    list1 = [1, 2]
    # 使用不同的變量存對象地址,會增加引用次數(shù)
    list2 = list1
    print(getrefcount(list1))
    list1 = [12, 34]

    list1 = []
    print(getrefcount(list2))


if __name__ == '__main__':
    main()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,313評論 2 89
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,675評論 1 32
  • 第一章 簡介 J2SE平臺的一大優(yōu)勢是它的自動化內(nèi)存管理,避免了開發(fā)者去面對內(nèi)存管理的復(fù)雜性。 本文以Sun J2...
    tianyiliusha閱讀 1,074評論 0 1
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,820評論 11 349
  • 本文由作者自行翻譯,未經(jīng)作者授權(quán),不得隨意轉(zhuǎn)發(fā)。后續(xù)作者會陸續(xù)發(fā)布一系列關(guān)于JVM內(nèi)存管理的文章,敬請期待。 1、...
    猿學(xué)堂閱讀 1,458評論 0 50

友情鏈接更多精彩內(nèi)容