<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      Python:__weakref__ 詳解

      0
      分享至

      在 Python 的對象模型中,變量的“賦值”本質(zhì)上是引用綁定(binding)。只要存在至少一個(gè)強(qiáng)引用指向某個(gè)對象,該對象就不會被垃圾回收。然而,有些場景中我們需要“觀察對象是否還存在”,又不希望阻止其被回收,這時(shí)就需要弱引用(Weak Reference)。__weakref__ 正是弱引用機(jī)制在對象內(nèi)部的核心載體。

      一、__weakref__ 是什么?

      __weakref__ 是 Python 對象中的一個(gè)內(nèi)置屬性,用于存儲該對象被弱引用(weakref 模塊)追蹤的信息。它通常由 Python 自動管理,用戶無需直接操作,但理解它有助于掌握弱引用的底層原理。

      核心功能:

      ? 存儲指向該對象的所有弱引用(weakref.ref、weakref.proxy 等)。

      ? 當(dāng)對象支持弱引用時(shí),Python 會自動為其實(shí)例生成此屬性。

      ? 若類使用 __slots__ 禁止了動態(tài)屬性,必須顯式聲明 __weakref__ 才能支持弱引用。

      語法:

      object.__weakref__

      示例:

      print(d.__weakref__)  # 輸出:
      

      在 CPython 中,每個(gè)對象都有一個(gè)引用計(jì)數(shù)(Reference Count),當(dāng)引用計(jì)數(shù)歸零時(shí),對象會被垃圾回收(GC),這種方式又稱為“強(qiáng)引用”。

      del b           # 引用計(jì)數(shù)為 0,對象被銷毀

      弱引用不會增加對象的引用計(jì)數(shù),因此不會阻止對象被回收。

      print(w())           # 輸出:None(對象已被回收,弱引用失效)

      二、weakref 模塊的使用

      Python 提供了 weakref 標(biāo)準(zhǔn)庫來管理弱引用。

      weakref.ref(obj):創(chuàng)建弱引用對象。

      weakref.proxy(obj):創(chuàng)建自動解引用的代理。

      weakref.WeakKeyDictionary:鍵為弱引用的字典。

      weakref.WeakValueDictionary:值為弱引用的字典。

      當(dāng)我們通過 weakref.ref(obj) 創(chuàng)建弱引用時(shí),Python 會將弱引用對象登記在目標(biāo)對象的 __weakref__ 屬性中。因此,__weakref__ 可以理解為:對象內(nèi)部用于記錄所有弱引用它的“登記表”。

      三、__weakref__ 與 __slots__ 的關(guān)系

      如果類定義了 __slots__,默認(rèn)情況下不會自動創(chuàng)建 __weakref__ 屬性,從而導(dǎo)致實(shí)例不支持弱引用。

      錯(cuò)誤示例:

          # 輸出:cannot create weak reference to 'A' object

      正確示例:

      print(w)  # 正常輸出

      若類定義了 __slots__ 且需支持弱引用,必須將 "__weakref__" 顯式包含在 __slots__ 列表中。

      四、弱引用的典型應(yīng)用場景

      (1)緩存與對象池

      適用于圖像、模型、數(shù)據(jù)庫連接等資源,希望緩存對象但又不阻止其回收。

      print(list(_cache.keys()))   # [] 緩存自動清除

      (2)打破循環(huán)引用

      弱引用常用于解決對象間的循環(huán)依賴問題。

      問題代碼(循環(huán)引用):

      child.parent = root  # 互相強(qiáng)引用,形成循環(huán)

      改進(jìn)代碼(使用弱引用):

      root.children.append(child)  # root 強(qiáng)引用 child (單向)

      (3)GUI、事件系統(tǒng)與觀察者模式

      在 GUI 框架或事件系統(tǒng)中,常用弱引用來注冊回調(diào)函數(shù),避免因回調(diào)持有對象引用而導(dǎo)致控件無法釋放。

      五、生命周期與內(nèi)存管理

      弱引用的價(jià)值在于:允許觀察對象存活狀態(tài),而不擁有對象。

      生命周期主要分為三個(gè)階段。

      (1)創(chuàng)建階段

      首次對對象創(chuàng)建弱引用時(shí):

      ? Python 為對象建立內(nèi)部弱引用鏈表(__weakref__)

      ? 弱引用對象加入鏈表

      ? 不增加引用計(jì)數(shù)

      w = weakref.ref(obj)  # obj 的引用計(jì)數(shù)不變

      (2)存活階段(對象仍存在)

      ? 調(diào)用 w() 返回原對象

      ? 對象正常使用,不受弱引用影響

      ? 弱引用不會阻止對象被垃圾回收

      示例:

          t.do_something()

      (3)銷毀階段(對象被回收)

      當(dāng)對象被 GC 回收時(shí):

      ? 所有弱引用失效

      ? 回調(diào)(如果有)被調(diào)用

      ? w() 永遠(yuǎn)返回 None

      print(w())    # None

      如果使用 proxy:

      p = weakref.proxy(A())

      對象消失后:

      # ReferenceError: weakly-referenced object no longer exists

      proxy 的安全性不如 ref,需要注意。

      六、常見誤區(qū)與注意事項(xiàng)

      (1)并非所有類型都支持弱引用

      內(nèi)置類型(int, str, tuple, list 等)通常不支持。

      print(hasattr(x, "__weakref__"))  # False,內(nèi)置類型 int 不支持弱引用

      僅用戶自定義類或特定擴(kuò)展類型支持弱引用。

      (2)弱引用不會延長對象壽命

      弱引用只觀察對象,不影響引用計(jì)數(shù)。

      (3)使用弱引用要檢查有效性

      若對象被銷毀后仍使用弱引用結(jié)果,會得到 None,需始終檢查返回值有效性。

      小結(jié)

      __weakref__ 是 Python 對象系統(tǒng)中一個(gè)低調(diào)卻至關(guān)重要的機(jī)制。它使得我們可以在不干擾對象生命周期的前提下,安全地追蹤、緩存或引用對象——這對于內(nèi)存優(yōu)化、循環(huán)引用處理、事件系統(tǒng)都有深遠(yuǎn)意義。


      點(diǎn)贊有美意,贊賞是鼓勵(lì)

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      太離譜,閑魚驚現(xiàn) iPhone 18 Pro 工程機(jī)

      太離譜,閑魚驚現(xiàn) iPhone 18 Pro 工程機(jī)

      花果科技
      2026-01-12 12:46:04
      全世界最狠的騙局,莫過于貸款買房。

      全世界最狠的騙局,莫過于貸款買房。

      流蘇晚晴
      2026-01-08 18:18:57
      俄軍怒火被徹底點(diǎn)燃,連夜裝填核彈,美終于怕了,威脅歐盟快收手

      俄軍怒火被徹底點(diǎn)燃,連夜裝填核彈,美終于怕了,威脅歐盟快收手

      妙知
      2026-01-12 13:32:43
      TOP14位身高170以上的女神,有顏有燈有演技

      TOP14位身高170以上的女神,有顏有燈有演技

      素然追光
      2026-01-02 02:45:02
      醫(yī)生發(fā)現(xiàn):天冷堅(jiān)持戴帽子的人,過不了幾個(gè)月,身體會有5大變化

      醫(yī)生發(fā)現(xiàn):天冷堅(jiān)持戴帽子的人,過不了幾個(gè)月,身體會有5大變化

      健康之光
      2026-01-12 11:50:08
      他上賽季還在保級隊(duì)效力,如今卻在冬訓(xùn)迎來逆襲,轉(zhuǎn)會蓉城踢首發(fā)

      他上賽季還在保級隊(duì)效力,如今卻在冬訓(xùn)迎來逆襲,轉(zhuǎn)會蓉城踢首發(fā)

      振剛說足球
      2026-01-12 13:46:01
      大清朝第一罪人,不是鰲拜,也不是吳三桂,而是當(dāng)了35年忠臣的他

      大清朝第一罪人,不是鰲拜,也不是吳三桂,而是當(dāng)了35年忠臣的他

      豐譚筆錄
      2026-01-12 07:50:12
      周一官宣新帥!曼聯(lián)高層拍板,索肖恐無緣回歸,黑馬脫穎而出

      周一官宣新帥!曼聯(lián)高層拍板,索肖恐無緣回歸,黑馬脫穎而出

      阿泰希特
      2026-01-12 10:02:14
      本周,青島開啟升溫模式,直沖13℃!接下來將迎雨雪天氣→

      本周,青島開啟升溫模式,直沖13℃!接下來將迎雨雪天氣→

      魯中晨報(bào)
      2026-01-12 07:17:07
      世體:國米只需付出1500萬歐,馬競便可以放莫利納離隊(duì)

      世體:國米只需付出1500萬歐,馬競便可以放莫利納離隊(duì)

      懂球帝
      2026-01-12 13:21:07
      中方下“逐客令”,直言:一粒大米也不要,直接叫停900萬噸訂單

      中方下“逐客令”,直言:一粒大米也不要,直接叫停900萬噸訂單

      愛吃醋的貓咪
      2025-12-27 16:24:13
      40歲保姆:拿著雇主的高工資提供特殊服務(wù),老公得知后和我離婚了

      40歲保姆:拿著雇主的高工資提供特殊服務(wù),老公得知后和我離婚了

      孢木情感
      2026-01-11 19:12:55
      歷經(jīng)十幾年談判,5個(gè)縣都劃歸鄰國,如今現(xiàn)狀如何了?

      歷經(jīng)十幾年談判,5個(gè)縣都劃歸鄰國,如今現(xiàn)狀如何了?

      鶴羽說個(gè)事
      2026-01-09 14:29:53
      南海撞機(jī)王偉成功跳傘,咋10萬人都找不到他?直到20多年后才明白

      南海撞機(jī)王偉成功跳傘,咋10萬人都找不到他?直到20多年后才明白

      鶴羽說個(gè)事
      2025-12-12 14:31:49
      離譜!美商務(wù)部長:臺積電必須雇傭跨性別、女同工程師!否則違規(guī)!

      離譜!美商務(wù)部長:臺積電必須雇傭跨性別、女同工程師!否則違規(guī)!

      EETOP半導(dǎo)體社區(qū)
      2026-01-12 11:38:27
      患者憤怒發(fā)聲:醫(yī)生準(zhǔn)時(shí)下班,等待無果引熱議!醫(yī)保局力推減少排隊(duì)等候

      患者憤怒發(fā)聲:醫(yī)生準(zhǔn)時(shí)下班,等待無果引熱議!醫(yī)保局力推減少排隊(duì)等候

      寶哥精彩賽事
      2026-01-12 08:25:18
      瑞銀分析師:2030年中國電動汽車或獨(dú)占全球市場三分之一份額

      瑞銀分析師:2030年中國電動汽車或獨(dú)占全球市場三分之一份額

      IT之家
      2026-01-12 11:13:09
      閆學(xué)晶“哭窮”后多平臺賬號禁止關(guān)注 其代言調(diào)料品牌老總:將向她索賠 不再請明星代言

      閆學(xué)晶“哭窮”后多平臺賬號禁止關(guān)注 其代言調(diào)料品牌老總:將向她索賠 不再請明星代言

      紅星新聞
      2026-01-10 14:19:18
      這個(gè)手握全球代碼精華的社區(qū),自殺了。

      這個(gè)手握全球代碼精華的社區(qū),自殺了。

      差評XPIN
      2026-01-12 00:08:23
      曝某頭部新勢力將關(guān)店、裁員!

      曝某頭部新勢力將關(guān)店、裁員!

      電動知家
      2026-01-11 13:59:09
      2026-01-12 14:16:49
      MediaTea
      MediaTea
      專業(yè)的數(shù)字媒體、新媒體技術(shù)
      1701文章數(shù) 72關(guān)注度
      往期回顧 全部

      科技要聞

      小米二手車價(jià)大跳水:SU7半年跌5萬元

      頭條要聞

      臺媒:大陸在朱日和基地復(fù)制"總統(tǒng)府" 不可掉以輕心

      頭條要聞

      臺媒:大陸在朱日和基地復(fù)制"總統(tǒng)府" 不可掉以輕心

      體育要聞

      聰明的球員,不是教練教出來的

      娛樂要聞

      閆學(xué)晶:脫離群眾太久 忘了自己的根

      財(cái)經(jīng)要聞

      揭秘“穩(wěn)賺不賠”的代工項(xiàng)目騙局

      汽車要聞

      增配不加價(jià) 北京現(xiàn)代 第五代 勝達(dá)2026款上市

      態(tài)度原創(chuàng)

      手機(jī)
      旅游
      教育
      藝術(shù)
      數(shù)碼

      手機(jī)要聞

      消息稱泡泡瑪特本月推“潮玩手機(jī)”,或與“年輕化主流品牌”合作

      旅游要聞

      哈爾濱“鉆石海”浪漫賞落日

      教育要聞

      學(xué)霸思維訓(xùn)練:巧求陰影部分的面積

      藝術(shù)要聞

      畫完這組畫,他抑郁了,后來自殺了

      數(shù)碼要聞

      2025年星閃終端產(chǎn)品出貨量突破1億臺 商用產(chǎn)品超600款

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 亚洲色成人www永久网站| 日本三级欧美三级人妇视频黑白配 | 黄色综合网| 日本三级香港三级三级人妇久| 国产xxxx视频在线观看免费| 日韩久久不卡| 国产乱视频在线观看| 免费人成黄页网站在线观看| 无码人妻视频一区二区三区| 久草综合网| 99这里只有精品6| 性色欲情网站iwww| 中文字幕网红自拍偷拍视频| 综合久久国产九一剧情麻豆| 内射干少妇亚洲69XXX| 国产肉丝袜在线观看| 五月天天天综合精品无码| 韩国办公室三级hd激情| 66亚洲一卡2卡新区成片发布| 西林县| 国产人妻精品无码av在线| 九九国产在线观看| 亚洲中文无码一区| 2020亚洲男人天堂| 夜夜春视频| 狠狠色婷婷久久综合频道日韩 | 国产午夜鲁丝片av无码| 六盘水市| 亚洲欧美另类小说| 毛片内射久久久一区| 国产v精品成人免费视频71pao| 亚洲午夜精品久久久久久app| 99视频只有精品| 九九九九精品视频在线观看| 91色在线视频| 色综合?人妻| 成人深爱网| 九九免费视频A| 内射老阿姨1区2区3区4区| 亚洲国产综合精品一区| 亚洲永久精品ww47|