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

首頁 > 編程 > Python > 正文

python如何在循環引用中管理內存

2020-01-04 15:23:33
字體:
來源:轉載
供稿:網友

python中通過引用計數來回收垃圾對象,在某些環形數據結構(樹,圖……),存在對象間的循環引用,比如樹的父節點引用子節點,子節點同時引用父節點,此時通過del掉引用父子節點,兩個對象不能被立即釋放

需求:

如何解決此類的內存管理問題?

如何查詢一個對象的引用計數?

       import sys

       sys.getrefcount(obj)

       # 查詢引用計數必多 1 ,因為object也引用 查詢對象

如何解決內存管理問題?

  • 通過weakref,進行弱引用,當del時候,不再引用,在引用方添加weakref.ref(引用obj);
  • 使用引用的時候,需要用到函數調用的形式
#!/usr/bin/python3 import weakrefimport sys  class Data(object): def __init__(self, value, owner):  self.value = value     # 聲明弱引用,owner為Node類本身  self.owner = weakref.ref(owner)   # 通過函數調用的方式訪問引用對象 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):     # 把類本身,也當做參數傳入Data類中  self.data = Data(value, self)   # 自定義對象名,容易辨認 def __str__(self):  return 'Node'   def __del__(self):  print('in_node.__del__')   if __name__ == '__main__': node = Node(100) print(node.data)   # 打印node對象的引用計數 print(sys.getrefcount(node) - 1)   # 當刪除node對象時候,Data實例對象在引用計算為0也相應釋放 del node   input('del done >>>>>')

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙河市| 江孜县| 鄂托克旗| 蒙自县| 泗阳县| 平塘县| 关岭| 衡南县| 北宁市| 博爱县| 永善县| 桃源县| 巨鹿县| 玛纳斯县| 兰坪| 莱西市| 棋牌| 南宁市| 商南县| 武功县| 平乡县| 福清市| 长顺县| 玛纳斯县| 鸡西市| 云浮市| 政和县| 黔江区| 甘孜县| 凤冈县| 乌海市| 汽车| 泊头市| 柏乡县| 铜川市| 闽清县| 临海市| 兴安县| 榕江县| 岳池县| 克拉玛依市|