成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python 內(nèi)存管理

qujian / 710人閱讀

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

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

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

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

垃圾回收:

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

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

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/44626.html

相關(guān)文章

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

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

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

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

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

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

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

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

    antz 評(píng)論0 收藏0
  • 改善Python程序的建議

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

    Clect 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

qujian

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<