Inhaltsverzeichnis
Garbage Collector in CPython
Zirkelverweise erkennen
Heim Backend-Entwicklung Python-Tutorial Erfahren Sie in einem Artikel mehr über den Garbage Collector in CPython

Erfahren Sie in einem Artikel mehr über den Garbage Collector in CPython

Oct 12, 2022 pm 03:32 PM
python

Dieser Artikel bringt Ihnen relevantes Wissen über Python, das hauptsächlich verwandte Probleme mit CPythons Garbage Collector vorstellt, einer integrierten Methode von Python, um das Zirkelverweisproblem zu lösen .

Erfahren Sie in einem Artikel mehr über den Garbage Collector in CPython

【Verwandte Empfehlung: Python3-Video-Tutorial

Garbage Collector in CPython

CPythons Garbage Collector (als GC bezeichnet) ist Pythons integrierte Methode zur Lösung des Zirkelverweisproblems. Standardmäßig läuft es immer im Hintergrund und entfaltet von Zeit zu Zeit seine Wirkung, sodass Sie sich keine Sorgen machen müssen, dass Zirkelverweise Ihren Speicher verstopfen.

Der Garbage Collector dient dazu, Zirkelverweisobjekte aus dem Arbeitsspeicher von CPython zu finden und zu entfernen. Dies geschieht auf folgende Weise.

  • Erkennen Sie zirkulär referenzierte Objekte

  • Rufen Sie die letzte __del__-Methode

  • auf, die die Zeiger von jedem Objekt entfernt (um das Schleifenproblem zu lösen), nur wenn die Schleife nach Schritt 2 immer noch verwaist ist. Das

Nachdem dieser Vorgang abgeschlossen ist, hat jedes Objekt, das sich zuvor in der Schleife befand, nun einen Referenzzähler von 0, sodass dieses Objekt aus dem Speicher gelöscht wird.

Obwohl es automatisch funktioniert, können wir es tatsächlich als Modul aus der Standardbibliothek importieren. Hier ist ein Beispiel:

import gc
Nach dem Login kopieren

Zirkelverweise erkennen

Der Garbage Collector von CPython verfolgt verschiedene Objekte, die im Speicher vorhanden sind – aber nicht alle Objekte. Wir können einige Objekte instanziieren und prüfen, ob der Garbage Collector sie sammelt.

>>> gc.is_tracked("a string")
False
>>> gc.is_tracked(["a", "list"])
True
Nach dem Login kopieren

Wenn ein Objekt Zeiger enthalten kann, gibt ihm dies die Fähigkeit, Teil einer zirkulären Referenzstruktur zu sein – und genau dafür gibt es Garbage-Detektoren, um sie zu erkennen und zu zerstören. In Python werden solche Objekte oft „Containerobjekte“ genannt.

Der Garbage Collector muss also über alle Objekte Bescheid wissen, die möglicherweise als Teil eines Zirkelverweises vorhanden sind. Strings können dies nicht, daher wird „ein String“ nicht vom Garbage Collector verfolgt. Listen können (wie wir gesehen haben) Zeiger enthalten, sodass ['a', 'list'] verfolgt wird.

Alle Instanzen benutzerdefinierter Klassen werden ebenfalls vom Garbage Collector verfolgt, da wir jederzeit beliebige Eigenschaften (Zeiger) für sie festlegen können.

>>> Wade = MyNameClass("Wade")
>>> gc.is_tracked(Wade)
True
Nach dem Login kopieren

Der Garbage Collector kennt also alle Objekte, die Zirkelverweise bilden können. Woher weiß es, ob ein Zirkelverweis gebildet wurde?

Es kennt auch alle Zeiger in jedem Objekt und weiß, wohin sie zeigen. Wir können diese Aktion sehen.

>>> my_list = ["a", "list"]
>>> gc.get_referents(my_list)
['list', 'a']
Nach dem Login kopieren

Die get_referents-Methode (auch als Traversal-Methode bekannt) empfängt ein Objekt und gibt eine Liste der darin enthaltenen Objektzeiger (seine Referenzen) zurück. Die obige Liste enthält also Zeiger auf jedes ihrer Elemente, bei denen es sich um Zeichenfolgen handelt.

Schauen wir uns die Methode get_referents in einer Schleife von Objekten an (allerdings noch kein Zirkelverweis, da auf die Objekte weiterhin aus dem Namespace zugegriffen werden kann).

>>> jane = MyNamedClass("Jane")
>>> bob = MyNamedClass("Bob")
>>> jane.friend = bob
>>> bob.friend = jane
>>> gc.get_referents(bob)
[{&#39;name&#39;: &#39;bob&#39;, &#39;friend&#39;: <__main__.MyNamedClass object at 0x7ff29a095d60>}, <class &#39;__main__
Nach dem Login kopieren

In dieser Schleife können wir sehen, dass das Objekt, auf das Bob zeigt, Zeiger auf Folgendes enthält: sein Eigenschaftenwörterbuch, das Bobs Namen (Bob) und seine Freunde enthält (die MyNamedClass-Instanz, auf die auch Jane zeigt). Das Bob-Objekt verfügt auch über einen Zeiger auf das Klassenobjekt selbst, da bob.class dieses Klassenobjekt zurückgibt.

Wenn der Garbage Collector ausgeführt wird, prüft er, ob jedes Objekt, das ihm bekannt ist (d. h. jedes Objekt, das True zurückgibt, wenn Sie gc.is_tracked aufrufen), vom Namespace aus erreichbar ist. Dies geschieht durch die Verfolgung aller Zeiger aus dem Namespace, auf Zeiger in den Objekten, auf die diese Zeiger verweisen usw., bis eine Gesamtansicht aller Dinge erstellt wurde, auf die über den Code zugegriffen werden kann.

Wenn der GC danach feststellt, dass einige Objekte aus dem Namespace nicht erreichbar sind, kann er diese Objekte löschen.

Denken Sie daran, dass alle Objekte, die sich noch im Speicher befinden, einen Referenzzähler ungleich Null haben müssen, andernfalls werden sie aufgrund des Referenzzählers gelöscht. Für Objekte, die nicht erreichbar sind, aber dennoch einen Referenzzähler ungleich Null haben, müssen sie Teil eines Zirkelverweises sein, weshalb uns die Möglichkeit, dass dies geschieht, so wichtig ist.

Kehren wir zur Referenzschleife Jane und Bob zurück und verwandeln diese Schleife in eine Schleifenisolation, indem wir den Zeiger aus dem Namespace entfernen.

>>> del jane
>>> del bob
Nach dem Login kopieren

Jetzt verstehen wir genau die Situation, die der Garbage Collector lösen soll. Wir können die manuelle Speicherbereinigung auslösen, indem wir gc.collect() aufrufen.

>>> gc.collect()
Deleting Bob!
Deleting Jane!
4
Nach dem Login kopieren

Standardmäßig führt der Garbage Collector diese Aktion von Zeit zu Zeit automatisch aus (da während der CPython-Laufzeit immer mehr Objekte erstellt und zerstört werden).

Im obigen Codeausschnitt enthält die Ausgabe, die wir sehen, die print-Anweisung der __del__-Methode von MyNamClass mit einer Zahl am Ende – in diesem Fall 4. Diese Zahl wird vom Garbage Collector selbst ausgegeben und sagt uns, wie viele Objekte entfernt wurden.

【Verwandte Empfehlungen: Python3-Video-Tutorial

Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über den Garbage Collector in CPython. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Python vs. C: Anwendungen und Anwendungsfälle verglichen Python vs. C: Anwendungen und Anwendungsfälle verglichen Apr 12, 2025 am 12:01 AM

Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern Apr 12, 2025 pm 11:36 PM

In diesem Artikel wird erläutert, wie die Leistung der Website verbessert wird, indem Apache -Protokolle im Debian -System analysiert werden. 1. Log -Analyse -Basics Apache Protokoll Datensätze Die detaillierten Informationen aller HTTP -Anforderungen, einschließlich IP -Adresse, Zeitstempel, URL, HTTP -Methode und Antwortcode. In Debian -Systemen befinden sich diese Protokolle normalerweise in /var/log/apache2/access.log und /var/log/apache2/error.log verzeichnis. Das Verständnis der Protokollstruktur ist der erste Schritt in der effektiven Analyse. 2. Tool mit Protokollanalyse Mit einer Vielzahl von Tools können Apache -Protokolle analysiert: Befehlszeilen -Tools: GREP, AWK, SED und andere Befehlszeilen -Tools.

Python: Spiele, GUIs und mehr Python: Spiele, GUIs und mehr Apr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Apr 12, 2025 am 12:10 AM

Der Vergleich zwischen Laravel und Python in der Entwicklungsumgebung und dem Ökosystem ist wie folgt: 1. Die Entwicklungsumgebung von Laravel ist einfach, nur PHP und Komponist sind erforderlich. Es bietet eine umfassende Auswahl an Erweiterungspaketen wie Laravelforge, aber die Wartung des Erweiterungspakets ist möglicherweise nicht rechtzeitig. 2. Die Entwicklungsumgebung von Python ist ebenfalls einfach, nur Python und PIP sind erforderlich. Das Ökosystem ist riesig und deckt mehrere Felder ab, aber das Versions- und Abhängigkeitsmanagement kann komplex sein.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Die Rolle von Debian Sniffer bei der DDOS -Angriffserkennung Die Rolle von Debian Sniffer bei der DDOS -Angriffserkennung Apr 12, 2025 pm 10:42 PM

In diesem Artikel wird die DDOS -Angriffserkennungsmethode erörtert. Obwohl kein direkter Antragsfall von "Debiansniffer" gefunden wurde, können die folgenden Methoden zur Erkennung von DDOS -Angriffsanfällen verwendet werden: Effektive DDOS -Angriffserkennungstechnologie: Erkennung auf der Grundlage der Verkehrsanalyse: Identifizierung von DDOS -Angriffen durch Überwachung abnormaler Muster des Netzwerkverkehrs, z. Beispielsweise können Python -Skripte in Kombination mit Pyshark- und Colorama -Bibliotheken den Netzwerkverkehr in Echtzeit überwachen und Warnungen ausstellen. Erkennung auf der Grundlage der statistischen Analyse: Durch Analyse statistischer Merkmale des Netzwerkverkehrs wie Daten

Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Apr 13, 2025 am 07:21 AM

In diesem Artikel werden Sie begleitet, wie Sie Ihr NginXSSL -Zertifikat auf Ihrem Debian -System aktualisieren. Schritt 1: Installieren Sie zuerst CertBot und stellen Sie sicher, dass Ihr System Certbot- und Python3-CertBot-Nginx-Pakete installiert hat. If not installed, please execute the following command: sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx Step 2: Obtain and configure the certificate Use the certbot command to obtain the Let'sEncrypt certificate and configure Nginx: sudocertbot--nginx Follow the prompts to select

Wie Debian Readdir sich in andere Tools integriert Wie Debian Readdir sich in andere Tools integriert Apr 13, 2025 am 09:42 AM

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

See all articles