最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳細(xì)分析Python垃圾回收機(jī)制

 更新時(shí)間:2020年07月01日 16:00:15   作者:云崖先生  
這篇文章主要介紹了Python垃圾回收機(jī)制的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

引入

為什么要有垃圾回收機(jī)制

  Python中的垃圾回收機(jī)制簡稱(GC),我們在程序的運(yùn)行中會(huì)產(chǎn)生大量的變量用于保存數(shù)據(jù),而有時(shí)候有些變量已經(jīng)沒有用了就需要被清理釋放掉該變量所占據(jù)的內(nèi)存空間。在一些較為低級的語言中(比如:C語言,匯編語言)對于內(nèi)存空間的釋放是需要編程人員來手動(dòng)進(jìn)行的,這種與底層硬件直接打交道的操作是十分的危險(xiǎn)與繁瑣的,而基于C語言開發(fā)而來的Python為了解決掉這種顧慮則自帶了一種垃圾回收機(jī)制,從而讓開發(fā)人員不必過分擔(dān)心內(nèi)存的使用情況而可以全身心的投入到開發(fā)中去。

>>> name = "yunya" #yunya 準(zhǔn)備改名
>>> name = "yunyaya" #原本yunya這個(gè)名字不使用了,現(xiàn)在必須清理掉它否則將會(huì)占據(jù)內(nèi)存空間,所幸Python的垃圾回收機(jī)制會(huì)幫我清理掉 "yunya"
>>

堆區(qū)和棧區(qū)的概念

  如果你看我之前寫的那篇文章關(guān)于Python變量的底層原理的話那么想必對堆區(qū)和棧區(qū)內(nèi)存有了一定的了解。如果沒有看過那么也沒有關(guān)系,鏈接如下:

Python變量與基本數(shù)據(jù)類型

底層工作原理

引用計(jì)數(shù)

  引用計(jì)數(shù)說白了就是來對堆區(qū)的變量值綁定的棧區(qū)變量名來計(jì)數(shù)。如圖:

  當(dāng)使用del或者對變量名重新賦值后,該變量值的引用計(jì)數(shù)就會(huì) -1 。當(dāng)引用計(jì)數(shù)為 0 時(shí)候下次 Python內(nèi)存回收機(jī)制 進(jìn)行內(nèi)存掃描時(shí)便會(huì)將該變量值當(dāng)做垃圾進(jìn)行回收。

 那么這里就是Python內(nèi)存回收機(jī)制中最基本的也最常用的引用計(jì)數(shù)介紹。

循環(huán)引用-內(nèi)存泄漏

  引用計(jì)數(shù)雖然作為Python內(nèi)存回收機(jī)制中最經(jīng)常使用的一種機(jī)制,但是它本身也是具有一定的缺點(diǎn)。我們來看下面這段代碼:

>>> l1 = [1,2,3]
>>> l2 = [1,2,3,l1]
>>> l1.append(l2)  #append()方法用于向列表中添加一個(gè)元素值
>>> l1
[1, 2, 3, [1, 2, 3, [...]]]
>>> l2
[1, 2, 3, [1, 2, 3, [...]]]
>>>

  現(xiàn)在l1和l2全部作為互相引用了。那么對于這種引用方式叫做循環(huán)引用(也被稱為交叉引用),循環(huán)引用會(huì)帶來一個(gè)問題:

  1. l1 變量值 的引用計(jì)數(shù) 目前為 2
  2. l2 變量值 的引用計(jì)數(shù) 目前為 2
  3. 當(dāng)使用 del l1 與 del l2 后呢?
  4. 它們的引用變量都減1,但是引用方式的變量名都互相刪除了,按理說這些變量值都成了垃圾變量。單根據(jù)引用計(jì)數(shù)是無法清理這些垃圾變量的。

 

>>> del l1
>>> del l2
>>> #現(xiàn)在怎么訪問 li1 或者 li2 呢?訪問不到,但是他們的變量值依然存在于內(nèi)存,引用計(jì)數(shù)從2變?yōu)?

標(biāo)記-清除

  標(biāo)記清除的意思在于當(dāng)應(yīng)用程序可用內(nèi)存空間即將被耗盡時(shí)便開始掃描棧區(qū),并且會(huì)順著棧區(qū)變量名對堆區(qū)中的變量值做一個(gè)標(biāo)記,如果堆區(qū)中存在沒有與棧區(qū)變量名做對應(yīng)關(guān)系的數(shù)據(jù)則會(huì)被認(rèn)為是垃圾數(shù)據(jù)從而被Python垃圾回收機(jī)制清理。

效率問題解決方案-分代回收

  基于引用計(jì)數(shù)的垃圾回收機(jī)制每一次執(zhí)行清理操作前都會(huì)將整個(gè)堆區(qū)的變量值的引用計(jì)數(shù)做一次遍歷統(tǒng)計(jì)。這樣做是非常消耗時(shí)間的,所以Python垃圾回收機(jī)制為了效率的提升加入了分代回收的策略。

參考文獻(xiàn)

http://m.fzitv.net/article/161474.htm

以上就是詳細(xì)分析Python垃圾回收機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于Python垃圾回收機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 超級好用的4個(gè)Python命令行可視化庫

    超級好用的4個(gè)Python命令行可視化庫

    通常大家都是在自己的電腦上跑程序,直接是可以可視化相應(yīng)的結(jié)果.如果是在服務(wù)器上的話,使用終端,是不太方便查看結(jié)果. 今天,小F就給大家介紹4個(gè)可以在命令行中使用的Python庫. 分別是Bashplotlib、tqdm、PrettyTable、Colorama,需要的朋友可以參考下
    2021-06-06
  • 基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識別

    基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識別

    這篇文章主要為大家詳細(xì)介紹了基于python神經(jīng)卷積網(wǎng)絡(luò)的人臉識別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 關(guān)于如何使用python的gradio庫

    關(guān)于如何使用python的gradio庫

    這篇文章主要介紹了關(guān)于如何使用python的gradio庫,Gradio是一個(gè)功能豐富的Python庫,可以讓您輕松創(chuàng)建和共享自己的交互式機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型,需要的朋友可以參考下
    2023-04-04
  • Python自然語言處理使用spaCy庫進(jìn)行文本預(yù)處理

    Python自然語言處理使用spaCy庫進(jìn)行文本預(yù)處理

    這篇文章主要為大家介紹了Python自然語言處理使用spaCy庫進(jìn)行文本預(yù)處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • python中封包建立過程實(shí)例

    python中封包建立過程實(shí)例

    在本篇文章里小編給大家分享的是一篇關(guān)于python中封包建立過程實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • Pycharm中python調(diào)用另一個(gè)文件類或者函數(shù)

    Pycharm中python調(diào)用另一個(gè)文件類或者函數(shù)

    本文主要介紹了Pycharm中python調(diào)用另一個(gè)文件類或者函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Tensorflow實(shí)現(xiàn)在訓(xùn)練好的模型上進(jìn)行測試

    Tensorflow實(shí)現(xiàn)在訓(xùn)練好的模型上進(jìn)行測試

    今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)在訓(xùn)練好的模型上進(jìn)行測試,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python學(xué)生管理系統(tǒng)的實(shí)現(xiàn)

    python學(xué)生管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了python學(xué)生管理系統(tǒng)的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • win10系統(tǒng)下python3安裝及pip換源和使用教程

    win10系統(tǒng)下python3安裝及pip換源和使用教程

    這篇文章主要介紹了win10系統(tǒng)下python3安裝及pip換源和使用教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 如何用python寫一個(gè)簡單的詞法分析器

    如何用python寫一個(gè)簡單的詞法分析器

    這篇文章主要介紹了如何用python寫一個(gè)簡單的詞法分析器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

巴东县| 米脂县| 宜昌市| 宿迁市| 南漳县| 阿克苏市| 栾川县| 兴义市| 荥经县| 通化县| 仙居县| 溧阳市| 鄂尔多斯市| 佛坪县| 荆州市| 顺昌县| 泸州市| 开原市| 黄龙县| 寻乌县| 枞阳县| 岫岩| 道孚县| 石城县| 垣曲县| 璧山县| 南靖县| 法库县| 南澳县| 开鲁县| 巩义市| 聂拉木县| 加查县| 白朗县| 彭阳县| 伊春市| 泸溪县| 定边县| 金塔县| 丰宁| 长垣县|