Comment Python gère la mémoire dans les références circulaires

小云云
Libérer: 2018-03-29 14:15:21
original
2582 Les gens l'ont consulté

En python, les objets poubelles sont recyclés grâce au comptage de références. Dans certaines structures de données circulaires (arbres, graphiques...), il existe des références circulaires entre les objets. Par exemple, le nœud parent de l'arbre fait référence au nœud enfant, et le nœud enfant fait également référence au nœud parent. À ce stade, en supprimant la référence aux nœuds parent et enfant, les deux objets ne peuvent pas être libérés immédiatement.

Exigences :

Comment résoudre ce genre de problème de gestion de la mémoire ?

Comment interroger le nombre de références d'un objet ?

Import Sys

Sys.getrefcount (obj)

#

Comment résoudre les problèmes de gestion de mémoire ?

    Faire une référence faible via faibleref. Lorsque del, ne fait plus référence, ajoutez faibleref.ref (référence obj) du côté référencement ; >
  • Lors de l'utilisation de références, vous devez utiliser la forme d'appels de fonction

Recommandations associées :


#!/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 >>>>>')
Copier après la connexion
Introduction à l'utilisation de la fonction de gestion de la mémoire PHP memory_get_usage()_PHP tutoriel


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal