python全局變量分配堆還是棧?
如果是引用數(shù)據(jù)類型的話,他們都是存在于棧內(nèi)存中而指向他們各自所在的內(nèi)存區(qū)域。簡單理解,就是無論他們在哪個內(nèi)存區(qū)域中(堆、棧、方法區(qū)),都會在棧內(nèi)存中留下一個入口。
內(nèi)存:棧 1.存放局部變量 2.不可以被多個線程共享 3.空間連續(xù),速度快
堆 1.存放對象 2.可以被多個線程共享 3.空間不連續(xù),速度慢,但是靈活
方法區(qū) 1.存放類的信息:代碼、靜態(tài)變量、字符串常量等等 2.可以被多個線程共享 3.空間不連續(xù),速度慢,但是靈活
成員變量是定義在類體中的變量, 作用范圍在整個 類體中有效, 使用前可以不賦值,會有默認(rèn)初始化動作, 而局部變量定義在方法中,使用前必須初始化,否則編譯失敗,作用范圍只在該方法中有效,出了這個方法就沒人認(rèn)識他了,
簡單點來說,成員變量在類中定義,非靜態(tài),存放在堆空間中,局部變量在方法或代碼塊中定義,存放在棧內(nèi)存中。
棧和堆的區(qū)別:
python棧是與每一個線程關(guān)聯(lián)的,python在創(chuàng)建每一個線程的時候,會分配一定的棧空間給線程。它主要用來存儲線程執(zhí)行過程中的局部變量,方法的返回值,以及方法調(diào)用上下文。棧空間隨著線程的終止而釋放
python中堆是由所有的線程共享的一塊內(nèi)存區(qū)域,堆用來保存各種JAVA對象,比如數(shù)組,線程對象等
實例變量存放在堆內(nèi)存 類變量存放在方法區(qū)