欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年03月20日 15:21:34   作者:北門吹雪  
這篇文章主要為大家詳細介紹了python如何在循環(huán)引用中管理內存,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

需求:

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

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

       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 >>>>>')

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

相關文章

  • Python使用xlrd模塊操作Excel數據導入的方法

    Python使用xlrd模塊操作Excel數據導入的方法

    這篇文章主要介紹了Python使用xlrd模塊操作Excel數據導入的方法,涉及Python操作xlrd模塊的技巧,需要的朋友可以參考下
    2015-05-05
  • 如何將bag文件批量轉成mp4

    如何將bag文件批量轉成mp4

    這篇文章主要介紹了將bag文件批量轉成mp4,這篇博客涉及的腳本用來將bag文件批量轉化為mp4文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Pyramid Mako模板引入helper對象的步驟方法

    Pyramid Mako模板引入helper對象的步驟方法

    ylons中的mako模板,默認會引入一個helper對象,我們可以在里面擴展方法,應對在模板輸出時候會常用的操作,那么在Pyramid中如何默認引入同樣的輔助類到模板中
    2013-11-11
  • 在Python中使用MySQL--PyMySQL的基本使用方法

    在Python中使用MySQL--PyMySQL的基本使用方法

    PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。這篇文章主要介紹了在Python中使用MySQL--PyMySQL的基本使用,需要的朋友可以參考下
    2019-11-11
  • Django項目創(chuàng)建到啟動詳解(最全最詳細)

    Django項目創(chuàng)建到啟動詳解(最全最詳細)

    這篇文章主要給大家介紹了關于Django項目創(chuàng)建到啟動的步驟,本文介紹的方法算是最全最詳細的一個項目,需要的朋友可以參考下
    2019-09-09
  • pytorch多GPU并行運算的實現

    pytorch多GPU并行運算的實現

    這篇文章主要介紹了pytorch多GPU并行運算的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Python存儲json數據發(fā)生亂碼的解決方法

    Python存儲json數據發(fā)生亂碼的解決方法

    當使用json.dump()把python對象轉換為json后存儲到文件中時,文件可能會出現亂碼的問題,本篇文章可以幫助您解決亂碼問題,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • 帶你從內存的角度看Python中的變量

    帶你從內存的角度看Python中的變量

    這篇文章主要為大家介紹了從內存的角度看Python中的變量,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python使用Tesseract實現從圖像中讀取文本

    Python使用Tesseract實現從圖像中讀取文本

    Tesseract?是一個基于計算機的系統(tǒng),用于光學字符識別?(OCR)?和其他圖像到文本處理,本文將介紹如何使用?Python?中的?Tesseract?創(chuàng)建一個可以從圖像中讀取文本的程序,需要的可以參考下
    2023-11-11
  • Python編程之變量賦值操作實例分析

    Python編程之變量賦值操作實例分析

    這篇文章主要介紹了Python編程之變量賦值操作,結合實例形式分析了Python賦值、位移、多元賦值操作符等相關操作使用技巧,需要的朋友可以參考下
    2017-07-07

最新評論