Wie Python den Speicher in Zirkelverweisen verwaltet

小云云
Freigeben: 2018-03-29 14:15:21
Original
2580 Leute haben es durchsucht

In Python werden Müllobjekte durch Referenzzählung recycelt. In einigen zirkulären Datenstrukturen (Bäume, Diagramme ...) gibt es zirkuläre Referenzen zwischen Objekten. Beispielsweise verweist der übergeordnete Knoten des Baums auf den untergeordneten Knoten. und der untergeordnete Knoten verweist auch auf den übergeordneten Knoten. Durch Löschen des Verweises auf den übergeordneten und untergeordneten Knoten können die beiden Objekte zu diesem Zeitpunkt nicht sofort freigegeben werden.

Anforderungen:

Wie löst man ein solches Speicherverwaltungsproblem?

Wie frage ich den Referenzzähler eines Objekts ab?

Import Sys

Sys.getrefcount (obj)

#

Wie löst man Speicherverwaltungsprobleme?

    Erstellen Sie eine schwache Referenz über schwachref. Fügen Sie auf der referenzierenden Seite schwachref.ref (Referenzobjekt) hinzu >
  • Bei der Verwendung von Referenzen müssen Sie die Form von Funktionsaufrufen verwenden

Verwandte Empfehlungen:


#!/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 >>>>>')
Nach dem Login kopieren
Einführung in die Verwendung der PHP-Speicherverwaltungsfunktion „memory_get_usage()_PHP-Tutorial“


Das obige ist der detaillierte Inhalt vonWie Python den Speicher in Zirkelverweisen verwaltet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage