亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-07 14:02:23 來源:腳本之家 閱讀:122 作者:北門吹雪 欄目:開發技術

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

需求:

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

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

       import sys

       sys.getrefcount(obj)

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

如何解決內存管理問題?

  • 通過weakref,進行弱引用,當del時候,不再引用,在引用方添加weakref.ref(引用obj);
  • 使用引用的時候,需要用到函數調用的形式
#!/usr/bin/python3
 
import weakref
import 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 >>>>>')

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳区| 碌曲县| 云梦县| 祁阳县| 吉隆县| 鄄城县| 安新县| 尉犁县| 云安县| 保靖县| 顺昌县| 色达县| 祁门县| 大新县| 木里| 玉田县| 南阳市| 新和县| 垣曲县| 福建省| 理塘县| 织金县| 芷江| 伊春市| 齐齐哈尔市| 十堰市| 无为县| 莱州市| 江山市| 阿尔山市| 庄河市| 瓦房店市| 离岛区| 佛冈县| 平阴县| 新巴尔虎左旗| 阜阳市| 汉阴县| 万盛区| 山东| 嘉定区|