国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python如何在循環(huán)引用中管理內(nèi)存

2020-02-22 23:31:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

python中通過(guò)引用計(jì)數(shù)來(lái)回收垃圾對(duì)象,在某些環(huán)形數(shù)據(jù)結(jié)構(gòu)(樹(shù),圖……),存在對(duì)象間的循環(huán)引用,比如樹(shù)的父節(jié)點(diǎn)引用子節(jié)點(diǎn),子節(jié)點(diǎn)同時(shí)引用父節(jié)點(diǎn),此時(shí)通過(guò)del掉引用父子節(jié)點(diǎn),兩個(gè)對(duì)象不能被立即釋放

需求:

如何解決此類的內(nèi)存管理問(wèn)題?

如何查詢一個(gè)對(duì)象的引用計(jì)數(shù)?

       import sys

       sys.getrefcount(obj)

       # 查詢引用計(jì)數(shù)必多 1 ,因?yàn)閛bject也引用 查詢對(duì)象

如何解決內(nèi)存管理問(wèn)題?

通過(guò)weakref,進(jìn)行弱引用,當(dāng)del時(shí)候,不再引用,在引用方添加weakref.ref(引用obj); 使用引用的時(shí)候,需要用到函數(shù)調(diào)用的形式
#!/usr/bin/python3 import weakrefimport sys  class Data(object): def __init__(self, value, owner):  self.value = value     # 聲明弱引用,owner為Node類本身  self.owner = weakref.ref(owner)   # 通過(guò)函數(shù)調(diào)用的方式訪問(wèn)引用對(duì)象 def __str__(self):  return "%s's data, value is %s" % (self.owner(), self.value)   def __del__(self):  print('in_data.__del__')  class Node(object): def __init__(self, value):     # 把類本身,也當(dāng)做參數(shù)傳入Data類中  self.data = Data(value, self)   # 自定義對(duì)象名,容易辨認(rèn) def __str__(self):  return 'Node'   def __del__(self):  print('in_node.__del__')   if __name__ == '__main__': node = Node(100) print(node.data)   # 打印node對(duì)象的引用計(jì)數(shù) print(sys.getrefcount(node) - 1)   # 當(dāng)刪除node對(duì)象時(shí)候,Data實(shí)例對(duì)象在引用計(jì)算為0也相應(yīng)釋放 del node   input('del done >>>>>')

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄大仙区| 宝丰县| 纳雍县| 元氏县| 临清市| 灌云县| 海林市| 霍邱县| 芦山县| 怀远县| 梅州市| 常宁市| 名山县| 龙游县| 河津市| 交口县| 四川省| 济源市| 长丰县| 岢岚县| 得荣县| 辽源市| 乃东县| 桓仁| 宿州市| 聂荣县| 娱乐| 靖边县| 辽阳县| 瑞昌市| 奉化市| 托克逊县| 子长县| 栖霞市| 武邑县| 和顺县| 尉氏县| 康定县| 扶绥县| 华池县| 龙胜|