国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 漳州市| 瑞昌市| 吉水县| 保靖县| 白玉县| 呼和浩特市| 岳普湖县| 宝丰县| 乌什县| 延安市| 金平| 乌鲁木齐市| 桐梓县| 阿尔山市| 始兴县| 濮阳市| 义乌市| 阿拉善左旗| 慈利县| 砀山县| 唐海县| 天长市| 台东县| 永德县| 女性| 昌平区| 元谋县| 刚察县| 青神县| 锡林郭勒盟| 抚宁县| 通河县| 楚雄市| 寿光市| 岳池县| 黔江区| 定陶县| 阳新县| 台安县| 安康市| 南充市|