最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

需求:

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

如何查詢一個(gè)對(duì)象的引用計(jì)數(shù)?

       import sys

       sys.getrefcount(obj)

       # 查詢引用計(jì)數(shù)必多 1 ,因?yàn)閛bject也引用 查詢對(duì)象

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

  • 通過weakref,進(jìn)行弱引用,當(dāng)del時(shí)候,不再引用,在引用方添加weakref.ref(引用obj);
  • 使用引用的時(shí)候,需要用到函數(shù)調(diào)用的形式
#!/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)
  
 # 通過函數(shù)調(diào)用的方式訪問引用對(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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

顺平县| 怀远县| 岚皋县| 石城县| 江西省| 平原县| 托里县| 甘肃省| 江门市| 利辛县| 木兰县| 嘉义市| 包头市| 辽阳市| 阳东县| 揭西县| 汝州市| 页游| 建宁县| 崇阳县| 乐清市| 舟曲县| 雷山县| 江山市| 台湾省| 龙游县| 安徽省| 襄樊市| 大新县| 澄城县| 湘西| 星子县| 桃江县| 彭阳县| 鸡泽县| 新兴县| 清新县| 江陵县| 顺昌县| 巴彦淖尔市| 涿鹿县|