Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist die Zerstörung von Python-Objekten? Was ist der Objektzerstörungsmechanismus (Garbage Collection) in Python?

Was ist die Zerstörung von Python-Objekten? Was ist der Objektzerstörungsmechanismus (Garbage Collection) in Python?

乌拉乌拉~
乌拉乌拉~Original
2018-08-20 14:38:401903Durchsuche

In diesem Artikel werden wir etwas über die Zerstörung von Python-Objekten (Garbage Collection) lernen. Diejenigen, die gerade erst mit der Programmiersprache Python in Berührung gekommen sind, sollten weniger über die Zerstörung von Python-Objekten (Garbage Collection) wissen, und ich weiß es nicht. Ich weiß nicht viel über Python Garbage Collection. Aber das spielt keine Rolle. Im nächsten Artikel werden wir etwas über die Zerstörung von Python-Objekten (Garbage Collection) und den Garbage Collection-Mechanismus in Python lernen.

Python-Objektzerstörung (Garbage Collection)

Python verwendet eine einfache Technik namens Referenzzählung, um Müll zu verfolgen und zu recyceln.

Intern zeichnet Python auf, wie viele Referenzen jedes verwendete Objekt hat.

Eine interne Tracking-Variable, Referenzzähler genannt.

Wenn ein Objekt erstellt wird, wird ein Referenzzähler erstellt. Wenn das Objekt nicht mehr benötigt wird, dh wenn der Referenzzähler des Objekts 0 wird, wird es durch Müll gesammelt. Das Recycling erfolgt jedoch nicht „sofort“. Der Interpreter wird den von Müllobjekten belegten Speicherplatz zum richtigen Zeitpunkt recyceln.

a = 40      # 创建对象  <40>
b = a       # 增加引用, <40> 的计数
c = [b]     # 增加引用.  <40> 的计数

del a       # 减少引用 <40> 的计数
b = 100     # 减少引用 <40> 的计数
c[0] = -1   # 减少引用 <40> 的计数

Garbage-Collection-Mechanismus zielt nicht nur auf Objekte mit einem Referenzzähler von 0 ab, sondern kann auch Zirkelverweise verarbeiten. Ein Zirkelverweis liegt vor, wenn zwei Objekte aufeinander verweisen, aber keine andere Variable auf sie verweist.

In diesem Fall reicht die Referenzzählung allein nicht aus. Der Garbage Collector von Python ist eigentlich ein Referenzzähler und ein zyklischer Garbage Collector. Zusätzlich zur Referenzzählung untersucht der Garbage Collector auch Objekte, die in großen Mengen zugewiesen werden (und solche, die durch die Referenzzählung nicht zerstört werden). In diesem Fall hält der Interpreter an und versucht, alle nicht referenzierten Schleifen zu bereinigen.

Instanzanalyse

Destruktor __del__, __del__ wird aufgerufen, wenn das Objekt nicht mehr verwendet wird, wird die __del__-Methode ausgeführt:

# !/usr/bin/python
# -*- coding: UTF-8 -*-
class Point:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name, "销毁"
        
pt1 = Point()
pt2 = pt1
pt3 = pt1
print id(pt1), id(pt2), id(pt3)  # 打印对象的id
del pt1
del pt2
del pt3

Die Ergebnisse des obigen Beispiels sind wie folgt:

3083401324 3083401324 3083401324Point 销毁

(Hinweis: Normalerweise müssen Sie eine Klasse in einer separaten Datei definieren.)

Das Obige ist alles, was hier beschrieben wird Artikelinhalt: In diesem Artikel wird hauptsächlich das Wissen über die Zerstörung von Python-Objekten (Garbage Collection) vorgestellt. Ich hoffe, Sie können die Informationen nutzen, um das oben Gesagte und die angegebenen Beispiele zu verstehen. Ich hoffe, dass das, was ich in diesem Artikel beschrieben habe, für Sie hilfreich ist und Ihnen das Erlernen von Python erleichtert. Weitere Informationen zu diesem Thema finden Sie in der Spalte

Python-Tutorial

auf der chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonWas ist die Zerstörung von Python-Objekten? Was ist der Objektzerstörungsmechanismus (Garbage Collection) in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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