精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Python 內存管理的工作原理,你了解嗎?

譯文 精選
開發 后端
Python 為開發者提供了許多便利,其中最大的便利之一是其幾乎無憂的內存管理。

Python 為開發者提供了許多便利,其中最大的便利之一是其幾乎無憂的內存管理。開發者無需手動為 Python 中的對象和數據結構分配、跟蹤和釋放內存。運行時會為你完成所有這些工作,因此你可以專注于解決實際問題,而不是爭論機器級細節。

盡管如此,即使是經驗不多的 Python 用戶,了解 Python 的垃圾收集和內存管理是如何工作的也是有好處的。了解這些機制將幫助你避免更復雜的項目可能出現的性能問題。你還可以使用 Python 的內置工具來監控程序的內存管理行為。

Python如何管理內存

每個 Python 對象都有一個引用計數,也稱為引用計數。 refcount 是持有對給定對象的引用的其他對象總數的計數。當你添加或刪除對對象的引用時,數字會上升或下降。當一個對象的引用計數變為零時,該對象將被釋放并釋放其內存。

什么是參考?允許通過名稱或通過另一個對象中的訪問器訪問對象的任何內容。

這是一個簡單的例子:

x = "Hello there"

當我們向 Python 發出這個命令時,引擎蓋下會發生兩件事:

  1. 該字符串"Hello there"作為 Python 對象創建并存儲在內存中。
  2. 該名稱x在本地命名空間中創建并指向該對象,這會將其引用計數增加 1 到 1。

如果我們說y = x,那么引用計數將再次提高到 2。

每當xandy超出范圍或從它們的命名空間中刪除時,對于每個名稱,字符串的引用計數都會減少 1。一旦x和y都超出范圍或被刪除,字符串的引用計數變為 0 并被刪除。

現在,假設我們創建了一個包含字符串的列表,如下所示:

x = ["Hello there", 2, False]

字符串保留在內存中,直到列表本身被刪除或包含字符串的元素從列表中刪除。這些操作中的任何一個都將導致唯一持有對字符串的引用的事物消失。

現在考慮這個例子:

x = "Hello there" y = [x]

如果我們從 中刪除第一個元素y,或者完全刪除列表y,則字符串仍在內存中。這是因為名稱x包含對它的引用。

Python 中的引用循環

在大多數情況下,引用計數工作正常。但有時你會遇到兩個對象各自持有對彼此的引用的情況。這稱為 參考周期。在這種情況下,對象的引用計數永遠不會達到零,也永遠不會從內存中刪除。

這是一個人為的例子:

x = SomeClass()
y = SomeOtherClass()
x.item = y
y.item = x

由于x并y持有彼此的引用,因此它們永遠不會從系統中刪除——即使沒有其他任何東西引用它們中的任何一個。

Python 自己的運行時為對象生成引用循環實際上是相當普遍的。一個示例是帶有包含對異常本身的引用的回溯對象的異常。

在Python的早期版本中,這是一個問題。具有引用周期的對象可能會隨著時間的推移而累積,這對于長時間運行的應用程序來說是一個大問題。但 Python 此后引入了循環檢測和垃圾收集系統,用于管理引用循環。

Python 垃圾收集器 (gc)

Python 的垃圾收集器檢測具有引用周期的對象。它通過跟蹤作為“容器”的對象(例如列表、字典、自定義類實例)并確定其中的哪些對象無法在其他任何地方訪問來實現這一點。

一旦這些對象被挑選出來,垃圾收集器就會通過確保它們的引用計數可以安全地降為零來刪除它們。

絕大多數 Python 對象沒有引用周期,因此垃圾收集器不需要 24/7 運行。相反,垃圾收集器使用一些啟發式方法來減少運行頻率,并且每次都盡可能高效地運行。

當 Python 解釋器啟動時,它會跟蹤已分配但未釋放的對象數量。絕大多數 Python 對象的生命周期都很短,因此它們會迅速出現和消失。但隨著時間的推移,更多長壽的物體會出現。一旦超過一定數量的此類對象堆積起來,垃圾收集器就會運行。

每次垃圾收集器運行時,它都會收集所有在收集中幸存下來的對象,并將它們放在一個稱為一代的組中。這些“第一代”對象在參考周期中被掃描的頻率較低。任何在垃圾收集器中幸存下來的第一代對象最終都會遷移到第二代,在那里它們被掃描得更少。

同樣,垃圾收集器不會跟蹤所有內容。例如,像用戶創建的類這樣的復雜對象總是被跟蹤。但是不會跟蹤僅包含簡單對象(如整數和字符串)的字典,因為該特定字典中的任何對象都不會包含對其他對象的引用。不能保存對其他元素(如整數和字符串)的引用的簡單對象永遠不會被跟蹤。

如何使用 gc 模塊

通常,垃圾收集器不需要調整即可運行良好。Python 的開發團隊選擇了反映最常見現實世界場景的默認值。但是如果你確實需要調整垃圾收集的工作方式,你可以使用Python 的 gc 模塊。該gc模塊為垃圾收集器的行為提供編程接口,并提供對正在跟蹤的對象的可見性。

gc當你確定不需要垃圾收集器時,你可以做的一件有用的事情是關閉它。例如,如果你有一個堆放大量對象的短運行腳本,則不需要垃圾收集器。腳本結束時,所有內容都將被清除。為此,你可以使用命令禁用垃圾收集器gc.disable()。稍后,你可以使用 重新啟用它gc.enable()。

你還可以使用 手動運行收集周期gc.collect()。一個常見的應用是管理程序的性能密集型部分,該部分會生成許多臨時對象。你可以在程序的該部分禁用垃圾收集,然后在最后手動運行收集并重新啟用收集。

另一個有用的垃圾收集優化是gc.freeze(). 發出此命令時,垃圾收集器當前跟蹤的所有內容都被“凍結”,或者被列為免于將來的收集掃描。這樣,未來的掃描可以跳過這些對象。如果你有一個程序在啟動之前導入庫并設置大量內部狀態,那么你可以gc.freeze()在所有工作完成后發出。這使垃圾收集器不必搜尋那些無論如何都不太可能被刪除的東西。(如果你想對凍結的對象再次執行垃圾收集,請使用gc.unfreeze().)

使用 gc 調試垃圾收集

你還可以使用它gc來調試垃圾收集行為。如果你有過多的對象堆積在內存中并且沒有被垃圾收集,你可以使用gc's 檢查工具來找出可能持有對這些對象的引用的對象。

如果你想知道哪些對象持有對給定對象的引用,可以使用gc.get_referrers(obj)列出它們。你還可以使用gc.get_referents(obj)來查找給定對象引用的任何對象。

如果你不確定給定對象是否是垃圾收集的候選對象,gc.is_tracked(obj)請告訴你垃圾收集器是否跟蹤該對象。如前所述,請記住垃圾收集器不會跟蹤“原子”對象(例如整數)或僅包含原子對象的元素。

如果你想親自查看正在收集哪些對象,可以使用 設置垃圾收集器的調試標志gc.set_debug(gc.DEBUG_LEAK|gc.DEBUG_STATS)。這會將有關垃圾收集的信息寫入stderr。它將所有作為垃圾收集的對象保留在只讀列表中。

避免 Python 內存管理中的陷阱

如前所述,如果你在某處仍有對它們的引用,則對象可能會堆積在內存中而不會被收集。這并不是 Python 垃圾收集本身的失敗。垃圾收集器無法判斷你是否不小心保留了對某物的引用。

讓我們以一些防止對象永遠不會被收集的指針作為結尾。

注意對象范圍

如果你將對象 1 指定為對象 2 的屬性(例如類),則對象 2 將需要超出范圍,然后對象 1 才會:

obj1 = MyClass()
obj2.prop = obj1

更重要的是,如果這種情況發生在某種其他操作的副作用中,例如將對象 2 作為參數傳遞給對象 1 的構造函數,你可能不會意識到對象 1 持有一個引用:

obj1 = MyClass(obj2)

另一個例子:如果你將一個對象推入模塊級列表并忘記該列表,則該對象將一直保留,直到從列表中刪除,或者直到列表本身不再有任何引用。但是如果該列表是一個模塊級對象,它可能會一直存在,直到程序終止。

簡而言之,請注意你的對象可能被另一個看起來并不總是很明顯的對象持有的方式。

使用 weakref避免引用循環

Python 的 weakref 模塊允許你創建對其他對象的弱引用。弱引用不會增加對象的引用計數,因此只有弱引用的對象是垃圾回收的候選對象。

一個常見的用途weakref是對象緩存。你不希望僅僅因為它具有緩存條目而保留引用的對象,因此你將 aweakref用于緩存條目。

手動中斷參考循環

最后,如果你知道給定對象包含對另一個對象的引用,你總是可以手動中斷對該對象的引用。例如,如果你有instance_of_class.ref = other_object,你可以設置instance_of_class.ref = None何時準備刪除 instance_of_class。

通過了解 Python 內存管理的工作原理,我們對其垃圾收集系統如何幫助優化 Python 程序中的內存,以及如何使用標準庫和其他地方提供的模塊來控制內存使用和垃圾收集。

原文標題:??Python garbage collection and the gc module??

責任編輯:黃顯東 來源: 51CTO
相關推薦

2020-05-13 08:10:32

HTTPS安全網站

2023-12-10 13:37:23

Python編程上下文管理

2019-11-12 14:40:43

CPU緩存內存

2023-11-06 07:23:06

API開發生態系統

2023-12-08 14:13:00

MemrayPython內存

2021-11-30 07:51:29

共享內存進程

2009-12-17 11:37:39

Linux網卡

2021-02-07 09:02:28

內存管理length

2018-11-20 09:37:19

Java內存模型

2024-08-02 14:52:00

2019-10-31 08:36:59

線程內存操作系統

2011-08-08 15:14:11

PPPOE

2020-10-21 09:28:25

JS變量的內存分配

2011-09-01 10:42:14

Objective-CCocoa內存管理

2012-09-27 10:24:22

監控機房

2014-04-17 16:42:03

DevOps

2012-09-06 17:54:28

2022-07-26 00:00:22

HTAP系統數據庫

2019-07-31 09:04:42

LVSNginxHAProxy

2012-02-06 13:52:33

JavaScript
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩卡一| 午夜在线一区二区| 欧美成人a∨高清免费观看| 国产精品www在线观看| 欧美在线观看在线观看| 麻豆精品国产91久久久久久| 欧美黑人性视频| 中文幕无线码中文字蜜桃| 亚洲精品69| 精品露脸国产偷人在视频| 一区二区三区|亚洲午夜| 熟妇高潮一区二区高潮| 卡一卡二国产精品 | 亚洲美女黄色| 日韩在线视频国产| 免费成人深夜夜行p站| 91成人在线网站| 欧美色道久久88综合亚洲精品| www亚洲国产| 你懂的视频在线观看| 国产成a人亚洲精| 国产免费成人av| 影音先锋亚洲天堂| 亚洲最大av| 在线中文字幕日韩| 欧美肉大捧一进一出免费视频| 欧美成人aaa| 91传媒视频在线播放| 精品少妇在线视频| v片在线观看| 国产精品成人一区二区艾草| 欧美精品欧美精品| 无码精品视频一区二区三区| 国产99久久久国产精品潘金| 91久久精品视频| 在线观看视频二区| 久久最新视频| 欧美专区在线视频| 国产一级淫片免费| 欧美片第1页综合| 精品国产一区二区三区久久久| 中文字幕在线看高清电影| 成人av影音| 精品国产乱码久久久久久牛牛 | 日韩中文字幕在线免费观看| 亚洲v国产v欧美v久久久久久| 精品资源在线| 亚洲第五色综合网| 国产真实乱人偷精品| 荡女精品导航| 亚洲成色777777女色窝| 95视频在线观看| 给我免费播放日韩视频| 日韩欧美国产综合在线一区二区三区 | 成人在线观看91| av网站免费播放| 国产成人精品亚洲日本在线桃色 | 那种视频在线观看| 亚洲黄色免费看| 色爱区综合激月婷婷| 国产美女三级视频| 精品三区视频| 欧美群妇大交群中文字幕| 午夜剧场在线免费观看| 91精品麻豆| 日韩午夜在线观看| 白嫩情侣偷拍呻吟刺激| 欧美五码在线| 亚洲午夜色婷婷在线| 摸摸摸bbb毛毛毛片| 色乱码一区二区三区网站| 久久精品国产v日韩v亚洲| a在线视频播放观看免费观看| 欧美福利在线| 2023亚洲男人天堂| 久草热在线观看| 九一九一国产精品| 国产 高清 精品 在线 a| 神马午夜一区二区| 国产欧美久久久精品影院| 天天干天天操天天干天天操| 在线观看午夜av| 污片在线观看一区二区| 欧美一级裸体视频| 日本一区二区乱| 日韩av在线网页| 三级影片在线观看| 伊人久久大香线蕉综合热线| 国产成人精品综合久久久| 在线亚洲欧美日韩| 成人不卡免费av| 日韩资源av在线| 污片视频在线免费观看| 色哟哟在线观看一区二区三区| 日韩av在线中文| 国产精品99久久免费观看| 中文字幕精品在线| 久久精品这里只有精品| 丝袜诱惑制服诱惑色一区在线观看| 国产精品主播视频| 亚洲美女福利视频| 中文在线一区二区| www.av片| 精品网站999| 亚洲人成在线播放| 精品少妇爆乳无码av无码专区| 久久亚洲二区| 亚洲aaa激情| 国产永久免费高清在线观看 | 懂色av蜜臀av粉嫩av分享吧最新章节| 国产一区不卡在线| 日韩精品另类天天更新| 99爱在线观看| 日韩一区二区在线播放| 日本一卡二卡在线播放| 99视频精品免费观看| 亚洲已满18点击进入在线看片 | 红桃av在线播放| 日本少妇精品亚洲第一区| 中文字幕一区电影| 9i精品福利一区二区三区| 高清久久久久久| 久久视频免费在线| 激情亚洲小说| 亚洲网址你懂得| 四虎精品永久在线| 99久久伊人精品| 性高湖久久久久久久久aaaaa| 色噜噜成人av在线| 在线视频欧美日韩精品| 在线观看 亚洲| 99久久99精品久久久久久| www国产无套内射com| 91精品一区| 久久国产一区二区三区| 中文字幕人妻色偷偷久久| 91亚洲国产成人精品一区二三| 毛片av在线播放| 欧美日韩黄色| 久久99久久久久久久噜噜| 国产露脸91国语对白| 中文字幕一区二区三区乱码在线| 男人女人黄一级| 精品久久不卡| 国产精品一久久香蕉国产线看观看| 噜噜噜在线观看播放视频| 一本色道a无线码一区v| 久久精品无码一区| 久久久久久久波多野高潮日日| 欧美日韩综合久久| 精品3atv在线视频| 中文字幕在线日韩| 亚洲图片小说视频| 亚洲日本在线观看| 精品国产午夜福利在线观看| 午夜精品久久| 国产精品av一区| 日韩伦理在线一区| 亚洲天堂视频在线观看| 中文字幕激情视频| 国产精品国产三级国产三级人妇 | 亚洲中文字幕在线观看| 综合分类小说区另类春色亚洲小说欧美 | 日本亚洲最大的色成网站www| 亚洲精品一区国产精品| 亚洲一区有码| 欧美激情一区二区三区成人| 少妇荡乳情欲办公室456视频| 欧美日韩精品二区| 国产aⅴ激情无码久久久无码| 蜜臀91精品一区二区三区| 成人手机视频在线| 一区二区亚洲视频| 欧洲日本亚洲国产区| 在线免费观看黄色| 日韩欧美成人一区二区| 国产成人精品一区二三区| 国产区在线观看成人精品| 天天干天天色天天干| 亚洲午夜极品| 日产精品高清视频免费| 国产精品日本一区二区不卡视频| 国模精品系列视频| 国产露出视频在线观看| 欧美一级二级三级蜜桃| 天堂网视频在线| 亚洲精品久久久蜜桃| 30一40一50老女人毛片| 久久97超碰国产精品超碰| 日b视频免费观看| 精品亚洲成人| 国产91社区| 欧美成a人片免费观看久久五月天| 欧美国产日韩一区二区在线观看| 免费在线黄色电影| 日韩一级免费观看| 中文字幕黄色片| 一区二区在线观看免费| 97在线观看免费视频| 国产成人午夜精品5599| 亚洲不卡视频在线| 亚洲精品资源| 成年人视频大全| 国产影视精品一区二区三区| 成人免费视频观看视频| 国产资源一区| 亲爱的老师9免费观看全集电视剧| 黄色av电影在线观看| 亚洲人成77777在线观看网| 精品久久久免费视频| 欧美怡红院视频| 日韩熟女精品一区二区三区| 亚洲欧美成人一区二区三区| 在线观看免费小视频| 成人av资源站| 国产精品久久久久野外| 奇米888四色在线精品| 日韩欧美视频网站| 激情欧美日韩| 艳母动漫在线观看| 日本女优一区| 日本不卡在线播放| 私拍精品福利视频在线一区| 成人免费观看网站| 视频成人永久免费视频| 91精品久久久久久久久久| 精品欧美一区二区三区在线观看| 久久免费国产精品1| 色www永久免费视频首页在线| 日韩在线视频网| 日韩在线免费电影| 一本色道久久88综合亚洲精品ⅰ | 国产精品久久久久久久久动漫| 无遮挡aaaaa大片免费看| 成人黄色小视频在线观看| 中国老熟女重囗味hdxx| 韩国三级电影一区二区| 午夜免费一级片| 国产另类ts人妖一区二区| 久久国产激情视频| 美女精品一区二区| 艹b视频在线观看| 蜜桃一区二区三区四区| www.精品在线| 久久综合综合久久综合| 亚洲精品20p| 狠狠色丁香久久婷婷综合丁香| 亚洲精品成人在线播放| 国内精品伊人久久久久av影院| www.国产福利| 国产成人午夜99999| 少妇熟女视频一区二区三区 | 亚洲综合影视| 欧美国产激情18| av老司机在线观看| 97视频人免费观看| 黑人巨大精品| 国产精品爽爽ⅴa在线观看| 欧美美女福利视频| 91嫩草视频在线观看| xvideos.蜜桃一区二区| 精品无码久久久久久久动漫| 色婷婷狠狠五月综合天色拍| 日韩高清在线播放| 93在线视频精品免费观看| 樱空桃在线播放| 亚洲福利一区| 国内自拍视频一区| 久久精品噜噜噜成人av农村| 极品白嫩少妇无套内谢| 99视频精品全部免费在线| 美女爆乳18禁www久久久久久| 国产精品九色蝌蚪自拍| 国产亚洲精品久久久久久打不开| 精品久久香蕉国产线看观看亚洲| 久草热在线观看| 日韩午夜小视频| 黄色国产在线| 插插插亚洲综合网| 欧美极品videos大乳护士| 国产日韩精品在线播放| 红杏成人性视频免费看| 日韩影片在线播放| 激情五月***国产精品| 成年人免费在线播放| 精品无码三级在线观看视频| 极品白嫩的小少妇| 国产精品视频免费看| 精品无码人妻一区二区三| 91黄视频在线| 丰满人妻妇伦又伦精品国产 | 国产黄网站在线观看| 性亚洲最疯狂xxxx高清| 青草综合视频| 久久久久久99| 午夜精品久久久久99热蜜桃导演 | 国产不卡在线一区| 性猛交ⅹxxx富婆video| 一区二区三区鲁丝不卡| 无码人妻丰满熟妇区bbbbxxxx| 欧美一区二区成人| 久草在线网址| 欧美—级高清免费播放| 免费视频成人| 欧美欧美一区二区| 激情91久久| 天美一区二区三区| 久久精品在这里| 日韩精品――中文字幕| 7777精品伊人久久久大香线蕉的 | 午夜免费一区二区| 99在线视频精品| 久久婷婷国产麻豆91| 欧美日韩精品高清| 免费国产在线观看| 91精品国产91久久久久久不卡| 国模大尺度视频一区二区| 日韩免费电影一区二区| 中文欧美日韩| 久久久久亚洲AV成人网人人小说| 自拍偷拍亚洲欧美日韩| 亚洲精品一区二区二区| 亚洲欧美国产精品久久久久久久| 丁香花在线电影小说观看| 97超级在线观看免费高清完整版电视剧| 欧美在线免费看视频| 久章草在线视频| 97精品国产露脸对白| 国产精品日日夜夜| 欧美电影精品一区二区| 最新黄网在线观看| 91视频婷婷| 亚欧美无遮挡hd高清在线视频| 国内外成人免费在线视频| 国产女主播视频一区二区| 自拍偷拍校园春色| 亚洲人成在线观看| 欧美影视资讯| 视频一区二区在线观看| 日本最新不卡在线| 特级西西人体高清大胆| 欧美性猛片aaaaaaa做受| 国产高清美女一级毛片久久| 国产成人亚洲综合91精品| 你懂的一区二区三区| 女人另类性混交zo| 亚洲国产精品精华液2区45| 中文字幕在线日亚洲9| 中文字幕亚洲一区二区三区| 91p九色成人| 中文字幕一区二区三区乱码 | 亚洲视频久久| jjzzjjzz欧美69巨大| 精品日韩中文字幕| 亚州男人的天堂| 国产精品国产福利国产秒拍| 欧美视频网址| 中文字幕第22页| 一区二区三区欧美久久| 亚洲精品久久久久久久久久久久久久 | 亚洲熟女少妇一区二区| 91精品国产综合久久精品图片| 欧美日韩色网| 久久久亚洲综合网站| 日韩高清欧美激情| 成人在线观看免费完整| 亚洲成人免费网站| 小黄鸭精品aⅴ导航网站入口| 亚洲精品中文字幕乱码三区不卡| 国产一区二区h| 久久久久久久久影院| 在线电影中文日韩| 精品久久亚洲| 欧美丰满熟妇bbbbbb百度| 中文字幕av不卡| 成人av无码一区二区三区| 日本精品视频在线观看| 久久裸体网站| 国产a级黄色片| 欧洲生活片亚洲生活在线观看| 黄网站在线免费| 久久国产欧美精品| 强制捆绑调教一区二区| 久久久夜色精品| 在线播放国产一区中文字幕剧情欧美| 日韩美女在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 欧美国产欧美综合| 亚洲爱情岛论坛永久| 国产精品av在线播放| 在线一区免费| 日韩女同一区二区三区| 欧美r级在线观看| 国产一区二区精品调教| www.av片| 亚洲精品视频观看| av资源种子在线观看| 国产伦视频一区二区三区| 精品亚洲国产成人av制服丝袜| aaa人片在线|