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

首頁 > 編程 > Python > 正文

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

2020-01-04 15:34:17
字體:
來源:轉載
供稿:網(wǎng)友

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

需求:

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

如何查詢一個對象的引用計數(shù)?

       import sys

       sys.getrefcount(obj)

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

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

  • 通過weakref,進行弱引用,當del時候,不再引用,在引用方添加weakref.ref(引用obj);
  • 使用引用的時候,需要用到函數(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)   # 通過函數(shù)調(diào)用的方式訪問引用對象 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):     # 把類本身,也當做參數(shù)傳入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對象的引用計數(shù) print(sys.getrefcount(node) - 1)   # 當刪除node對象時候,Data實例對象在引用計算為0也相應釋放 del node   input('del done >>>>>')

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


注:相關教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 库尔勒市| 资溪县| 中西区| 巫溪县| 陇南市| 浮梁县| 吉隆县| 陇西县| 南涧| 五莲县| 衡东县| 孝感市| 清流县| 伊宁县| 习水县| 土默特左旗| 历史| 合水县| 红桥区| 阿坝县| 莎车县| 民县| 沙坪坝区| 临西县| 泗阳县| 阿城市| 稷山县| 天台县| 宜兰县| 永胜县| 韩城市| 武定县| 郓城县| 司法| 富宁县| 大姚县| 夏河县| 马尔康县| 淳安县| 浦江县| 大宁县|