精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久久成人精品无码| 台湾无码一区二区| 中文人妻熟女乱又乱精品| 日韩一区亚洲二区| 欧美三级电影精品| 免费久久久久久| 人人妻人人澡人人爽精品日本| 国产欧美日韩亚洲一区二区三区| 亚洲视频在线看| 成年人三级黄色片| 久久青青色综合| 97久久精品人人做人人爽50路| 国产精品视频一区国模私拍| 欧美三级在线免费观看| 国产精品美女久久久久久不卡| 欧美日韩精品一区二区| 成人午夜免费在线| 嫩草在线视频| av一二三不卡影片| 91久久精品在线| 国产女人精品视频| www.五月天色| 欧美极度另类| 亚洲一区二区精品久久av| 日韩av高清在线播放| 亚洲精品视频91| 麻豆精品在线观看| 欧美又大又粗又长| 免费在线一区二区三区| 青青草国产成人a∨下载安卓| 精品成a人在线观看| 日韩在线不卡一区| 美女18一级毛片一品久道久久综合| 亚洲视频一区在线| 欧美极品色图| 蜜桃在线一区二区| 国产一区二区剧情av在线| 日本aⅴ大伊香蕉精品视频| 久久久久久国产精品免费播放| 91亚洲国产高清| 亚洲人成网7777777国产| 日本性生活一级片| 欧美国产中文高清| 欧美乱熟臀69xxxxxx| 一区二区三区国产免费| 在线日韩影院| 欧美日韩加勒比精品一区| 亚洲精品无码国产| 污影院在线观看| 日韩精品免费一区二区夜夜嗨| 亚洲欧美日韩视频二区| 欧美黑人xxxx| 免费在线观看国产精品| 91精品亚洲| 久久天天躁狠狠躁夜夜躁2014| 青青草自拍偷拍| 久久精品国产99久久| 在线亚洲欧美视频| 日韩一卡二卡在线观看| 日韩免费久久| 日韩在线观看网址| 潘金莲一级黄色片| 午夜片欧美伦| 免费不卡欧美自拍视频| 中文字幕在线观看成人| 欧美日本一区二区高清播放视频| 九九久久国产精品| 69精品久久久| 亚洲欧美日本日韩| 国产精品jvid在线观看蜜臀| 91麻豆精品在线| 蜜臀久久99精品久久久画质超高清 | 久久久久国产| 精品中文字幕在线2019| 国产午夜福利一区二区| 乱人伦精品视频在线观看| 日韩av三级在线观看| 中文字幕网址在线| 国产一区二区三区在线看麻豆| 97久久精品午夜一区二区| www.国产麻豆| 91天堂素人约啪| 亚洲a∨一区二区三区| 成人免费在线| 精品福利在线视频| 九九热在线免费| 日韩成人视屏| 精品视频—区二区三区免费| 在线亚洲国产精品网| 91亚洲免费视频| 91亚洲无吗| 国产视频欧美视频| 国产123在线| 欧美另类专区| 国产成人精品999| 精品人妻一区二区三区含羞草| 94色蜜桃网一区二区三区| 亚欧洲精品在线视频免费观看| av香蕉成人| 欧美丝袜美女中出在线| mm131亚洲精品| 久久成人福利| 久久精品电影网站| 天天综合天天干| 精品一区二区三区久久| 精品视频高清无人区区二区三区| 成年人视频网站在线| 一区二区三区四区不卡视频| 日韩在线xxx| 一区二区三区欧洲区| 亚洲视频专区在线| 国产在线观看免费视频今夜| 免费观看在线色综合| 国产欧美亚洲日本| 黄色网在线免费看| 狠狠色噜噜狠狠狠狠97| 女人扒开腿免费视频app| 国产一区二区三区四区二区| 午夜欧美大片免费观看| 97国产成人无码精品久久久| xnxx国产精品| 国产中文字幕乱人伦在线观看| av av片在线看| 国产精选一区| 午夜伦理精品一区| 成人av手机在线| 中文字幕亚洲区| 亚洲天堂av线| 蜜臀91精品国产高清在线观看| 欧美日本啪啪无遮挡网站| 中文字幕av网站| 久久久高清一区二区三区| 亚洲中文字幕无码av永久| 高清不卡一区| 久久天堂av综合合色| 欧美日韩a v| 91麻豆国产福利精品| 福利视频免费在线观看| 国产精品1区在线| 正在播放国产一区| 波多野结衣一区二区三区在线| 95精品视频在线| 91专区在线观看| 狼人精品一区二区三区在线| 亚洲天堂日韩电影| 无码aⅴ精品一区二区三区| 99久久精品免费观看| 免费看欧美黑人毛片| 亚洲超碰在线观看| 欧美成人午夜激情视频| 国产黄色一区二区| 一区二区三区在线视频免费观看| 一本一道久久a久久综合蜜桃| 成人免费在线观看av| 国产精品入口尤物| 中文字幕日本在线观看| 欧美性大战久久久久久久| 最近中文字幕免费| 久久这里有精品15一区二区三区| 久久99精品久久久久久秒播放器| 极品美鲍一区| 亚洲欧美国产一本综合首页| 无码免费一区二区三区| 日本一区二区三区四区 | 亚洲免费黄色网址| 国产.欧美.日韩| 人妻无码久久一区二区三区免费| 精品精品国产毛片在线看| 97欧美精品一区二区三区| 午夜在线观看视频18| 色94色欧美sute亚洲13| 91成人精品一区二区| 国产中文一区二区三区| 国产精品va在线观看无码| 哺乳挤奶一区二区三区免费看| 久久久综合av| 青青久草在线| 欧美三级视频在线播放| 蜜桃av.com| 国产精品一二三四五| 分分操这里只有精品| 奇米亚洲欧美| 91色精品视频在线| 春色校园综合激情亚洲| 国产视频一区在线| 夜夜躁日日躁狠狠久久av| 综合网在线视频| 亚洲黄色在线网站| 久久电影国产免费久久电影| 日本男女交配视频| 在线视频亚洲专区| 成人精品视频在线| 51精品视频| 在线丨暗呦小u女国产精品| a天堂视频在线| 色综合久久88色综合天天6| 国产性生活大片| 91碰在线视频| 四虎成人在线播放| 亚洲一区欧美激情| 三上悠亚免费在线观看| 免费无码毛片一区二区app| 亚洲国产美女 | 免费理论片在线观看播放老| 欧美巨大另类极品videosbest | 欧美日韩精品区| 亚洲欧洲国产日本综合| 五级黄高潮片90分钟视频| 国产综合色精品一区二区三区| 无码人妻h动漫| 欧美1区视频| 日韩和欧美的一区二区| 成人av综合网| 91久久精品美女| 成人看片网站| 57pao精品| 成人影音在线| 欧美成人亚洲成人日韩成人| 成人好色电影| 亚洲欧美日韩区| 蜜臀av免费在线观看| 91麻豆精品国产| 中文字幕网址在线| 在线观看一区不卡| 国产精品视频久久久久久久| 一区二区三区美女| 日韩三级久久久| 国产无人区一区二区三区| 在线视频 日韩| 成人午夜短视频| 欧美国产日韩在线视频 | 99中文字幕在线| 日本成人在线电影网| 亚洲国产精品久久久久爰色欲| 国内精品久久久久久久影视麻豆| 性做爰过程免费播放| 日韩片欧美片| 香蕉久久夜色| av中字幕久久| 日韩在线www| 樱花草www在线| 日本欧美一区二区在线观看| 日韩毛片在线免费看| 亚洲在线网站| 久久久久久久久久福利| 午夜在线一区| 欧美亚洲国产成人| 亚洲一区国产| 亚洲人成无码www久久久| 久久国产99| 久久久久久久久久福利| 日本不卡视频在线| 三年中国国语在线播放免费| 日韩中文字幕亚洲一区二区va在线| 成人一对一视频| 国产精品日本| www.国产区| 免费欧美日韩国产三级电影| 色天使在线观看| 韩国午夜理伦三级不卡影院| 亚欧精品在线视频| 成人听书哪个软件好| youjizz.com国产| 91美女在线观看| 精品国产成人亚洲午夜福利| 国产日韩欧美在线一区| 免费黄在线观看| 综合色天天鬼久久鬼色| 国产真人真事毛片| 福利微拍一区二区| www.久久精品视频| 欧美男人的天堂一二区| 国内精品久久久久久久久久久| 精品国产区一区| 日韩av资源| 中文日韩电影网站| 影音先锋男人在线资源| 久久久亚洲影院| 福利一区视频| 91久久极品少妇xxxxⅹ软件| 久久国产精品色av免费看| 欧美日韩国产一二| 婷婷激情综合| 久久久久久久久久久99| 男男视频亚洲欧美| 中文写幕一区二区三区免费观成熟| 不卡影院免费观看| 色www亚洲国产阿娇yao| 亚洲影院在线观看| 国产农村妇女aaaaa视频| 欧美日韩一区 二区 三区 久久精品| 国产麻豆免费观看| 亚洲精品小视频| 日本www在线观看视频| 97精品免费视频| 99综合久久| 欧美极品一区二区| 综合精品一区| 91视频免费版污| 成人免费视频caoporn| 国产欧美小视频| 亚洲国产精品一区二区久久 | 51午夜精品国产| 亚洲欧美日韩动漫| 美女少妇精品视频| 欧美日韩视频免费观看| 国产成人成网站在线播放青青| 欧美色女视频| 成人黄色av片| 国产jizzjizz一区二区| 人人妻人人澡人人爽| 午夜视频在线观看一区| 国产精品无码在线播放| 亚洲人成77777在线观看网| 免费网站在线观看人| 国产精品老女人精品视频| 免费看久久久| 欧美人与动牲交xxxxbbbb| 蜜乳av一区二区| 丰满少妇一区二区三区| 亚洲亚洲精品在线观看| 国产男女裸体做爰爽爽| 在线观看精品国产视频| 亚洲欧洲高清| 韩国成人一区| 亚洲福利久久| 黑人无套内谢中国美女| 亚洲特级片在线| 91成人国产综合久久精品| 国产亚洲精品久久久| 中文字幕人成乱码在线观看| 国产精品免费一区二区三区观看| 在线一区电影| 999久久久精品视频| 国产精品毛片无遮挡高清| 波多野结衣一区二区三区四区| 亚洲美女av黄| 少妇视频一区| 国产在线一区二区三区欧美| 国产精品mv在线观看| 性色av浪潮av| 亚洲一区二区影院| 亚洲国产999| 欧美第一页在线| 99久久人爽人人添人人澡 | 亚洲欧美另类综合| 久久香蕉国产线看观看av| 人人玩人人添人人澡欧美| 亚洲二区自拍| 久久精品国产亚洲a| 亚洲少妇xxx| 欧美精品日韩精品| 国产原创视频在线观看| 91九色国产视频| 一个色综合网| 欧美图片自拍偷拍| 亚洲国产精品久久艾草纯爱 | 国产亚洲一级高清| 3d欧美精品动漫xxxx无尽| 日韩av在线电影观看| 蜜臀91精品一区二区三区| 老司机深夜福利网站| 欧美一级一区二区| 青草av在线| 久久波多野结衣| 首页欧美精品中文字幕| av免费播放网站| 欧美老年两性高潮| 欧美人与性动交α欧美精品图片| 国产欧美一区二区视频| 久久久www| 9999热视频| 亚洲精品久久久久久久久久久| 国产深夜视频在线观看| 久久偷窥视频| 麻豆国产一区二区| 久久免费视频精品| 亚洲免费视频一区二区| 成人精品三级| 国产成人一区二区三区别| 93久久精品日日躁夜夜躁欧美| 中国一区二区视频| 欧美激情欧美激情在线五月| 日本韩国欧美超级黄在线观看| 国产视频一区二区视频| 亚洲女人的天堂| 清纯唯美亚洲色图| 亚洲一区二区三区久久| 在线亚洲一区| 日本少妇aaa| 日韩成人网免费视频| 日韩免费在线电影| 一二三四视频社区在线| 国产精品视频看| 人妻中文字幕一区| 成人欧美一区二区三区黑人孕妇| 夜夜嗨一区二区| h色网站在线观看| 日韩成人网免费视频| 久久久久久久久久久久电影|