成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python 內(nèi)存管理

qujian / 679人閱讀

摘要:原文鏈接內(nèi)存管理機制及優(yōu)化簡析中有兩種內(nèi)存管理機制共存引用計數(shù)當(dāng)一個對象的引用為時,對象被刪除但是無法處理循環(huán)引用垃圾回收在中所有能夠引用其他對象的對象都被稱為容器因此只有容器之間才可能形成循環(huán)引用的垃圾回收機制利用了這個特點來尋找需要被釋

原文鏈接:Python內(nèi)存管理機制及優(yōu)化簡析

Python 中有兩種內(nèi)存管理機制共存:

引用計數(shù):當(dāng)一個對象的引用為0時,對象被刪除(但是無法處理循環(huán)引用)

垃圾回收:

在Python中, 所有能夠引用其他對象的對象都被稱為容器(container). 因此只有容器之間才可能形成循環(huán)引用. Python的垃圾回收機制利用了這個特點來尋找需要被釋放的對象. 為了記錄下所有的容器對象, Python將每一個 容器都鏈到了一個雙向鏈表中, 之所以使用雙向鏈表是為了方便快速的在容器集合中插入和刪除對象. 有了這個 維護了所有容器對象的雙向鏈表以后, Python在垃圾回收時使用如下步驟來尋找需要釋放的對象:

對于每一個容器對象, 設(shè)置一個 gc_refs 值, 并將其初始化為該對象的引用計數(shù)值.

對于每一個容器對象, 找到所有其引用的對象, 將被引用對象的 gc_refs 值減1.

執(zhí)行完步驟2以后所有 gc_refs 值還大于0的對象都被非容器對象引用著, 至少存在一個非循環(huán)引用. 因此 不能釋放這些對象, 將他們放入另一個集合.

在步驟3中不能被釋放的對象, 如果他們引用著某個對象, 被引用的對象也是不能被釋放的, 因此將這些 對象也放入另一個集合中.

此時還剩下的對象都是無法到達的對象. 現(xiàn)在可以釋放這些對象了.

值得注意的是, 如果一個Python對象含有 __del__ 這個方法, Python的垃圾回收機制即使發(fā)現(xiàn)該對象不可到達 也不會釋放他. 原因是 __del__ 這個方式是當(dāng)一個Python對象引用計數(shù)為0即將被刪除前調(diào)用用來做清理工作的. 由于垃圾回收找到的需要釋放的對象中往往存在循環(huán)引用的情況, 對于循環(huán)引用的對象a和b, 應(yīng)該先調(diào)用哪 一個對象的 __del__ 是無法決定的, 因此Python垃圾回收機制就放棄釋放這些對象, 轉(zhuǎn)而將這些對象保存起來, 通過gc.garbage這個變量訪問. 程序員可以通過 gc.garbage 手動釋放對象, 但是更好的方法是避免在代碼中定義 __del__ 這個方法.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44626.html

相關(guān)文章

  • 能讓你更早下班的Python垃圾回收機制

    摘要:內(nèi)部通過引用計數(shù)機制來統(tǒng)計一個對象被引用的次數(shù)。下一步,就該被我們的垃圾回收器給收走了。而我們垃圾回收機制只有當(dāng)引用計數(shù)為的時候才會釋放對象。以空間換時間的方法提高垃圾回收效率。 人生苦短,只談風(fēng)月,談什么垃圾回收。據(jù)說上圖是某語言的垃圾回收機制。。。我們寫過C語言、C++的朋友都知道,我們的C語言是沒有垃圾回...

    pumpkin9 評論0 收藏0
  • 精選50道Python面試題,快來看看你已經(jīng)掌握了多少道吧

    摘要:從存儲的字符串表示中檢索原始對象的過程稱為。這稱為命名空間。如果需要八進制或十六進制表示,請使用內(nèi)置函數(shù)或。和有什么區(qū)別返回對象,而返回列表,并使用相同的內(nèi)存,無論范圍大小是多少。它提供了靈活性,并允許開發(fā)人員為他們的項目使用正確的工具。 ...

    zzir 評論0 收藏0
  • Python整數(shù)對象池:“內(nèi)存泄漏”?

    摘要:這里需要說明的是,小的整數(shù)對象,將全部直接放置于內(nèi)存中。內(nèi)存泄漏上述的機制可以很好減輕的問題,同時可以根據(jù)所跑的程序不同的特點來做從而編譯出自己認為合適的。 墻上的斑點 我第一次注意到短褲上的那個破洞,大概是在金年的三月上旬。如果想要知道具體的時間,那就得回想一下當(dāng)時我看見的東西。我還能夠回憶起,游泳池頂上,搖曳的、白色的燈光不停地映在我的短褲上;有三五名少年一同扎進了水里。哦,那是大...

    isLishude 評論0 收藏0
  • Python-爬蟲工程師-面試總結(jié)

    摘要:內(nèi)存池機制提供了對內(nèi)存的垃圾收集機制,但是它將不用的內(nèi)存放到內(nèi)存池而不是返回給操作系統(tǒng)。為了加速的執(zhí)行效率,引入了一個內(nèi)存池機制,用于管理對小塊內(nèi)存的申請和釋放。 注:答案一般在網(wǎng)上都能夠找到。1.對if __name__ == main的理解陳述2.python是如何進行內(nèi)存管理的?3.請寫出一段Python代碼實現(xiàn)刪除一個list里面的重復(fù)元素4.Python里面如何拷貝一個對象?...

    antz 評論0 收藏0
  • 改善Python程序的建議

    摘要:斷言是用來捕獲用戶定義的約束的,不是用來捕獲程序本身的錯誤的。使用自動關(guān)閉資源語句可以在代碼塊執(zhí)行完畢后還原進入該代碼塊時的現(xiàn)場。在文件管理時使用總能保證文件被正常關(guān)閉。則是將指向?qū)ο蟆⒖假Y料編寫高質(zhì)量代碼改善程序的個建議 三元操作符: 我們都知道在C語言中,三元操作符為C ? X : Y,在人們的強烈要求下,python2.5之后三元操作符等價為X if C else Y。...

    Clect 評論0 收藏0

發(fā)表評論

0條評論

qujian

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<