Heim  >  Artikel  >  Backend-Entwicklung  >  Ein einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen)

Ein einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen)

不言
不言Original
2018-09-18 15:31:201838Durchsuche

Dieser Artikel vermittelt Ihnen ein einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen). Freunde in Not können darauf verweisen.

Vorn geschrieben:

Die vorherige Socket-Serie ist zu Ende, hauptsächlich um eine Zusammenfassung und Aufzeichnung dessen zu erstellen, was ich gelernt habe.

Als nächstes habe ich vor, einen HTTP-Server zu schreiben, der Parallelität basierend auf Libevent unterstützt. Da der Meister in der Studiengruppe zuvor bereits einen Server entwickelt hatte, der sowohl HTTP als auch WebSocket unterstützt, war ich nach der Lektüre sehr interessiert und kaufte mir dieses Netzwerkprogrammierbuch zum Lesen. Ich habe vor, auf ihn zurückzugreifen, um eine optimierte Version zu schreiben.

unterstützt nur HTTP. Nachdem ich es geschrieben habe, kann ich es mit allen teilen. Obwohl es nicht in einer Produktionsumgebung verwendet werden kann, glaube ich, dass es für mich eine große Verbesserung sein wird, nachdem ich den Quellcode gelernt habe.

Als nächstes geben Sie das Thema ein:

Geben Sie zuerst den Beispielcode ein:

Ein einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen)

Wir erstellen einen zum Testen Das x-Objekt enthält einen Konstruktor und einen Destruktor.

Das x-Objekt wird zum ersten Mal initialisiert und von der Variablen a referenziert, sodass der Referenzzähler hier 1 ist. Ermitteln Sie dann die Anzahl der Referenzen über getrefcount, die hier zu 2 wird, da der Aufruf der Funktion getrefcount selbst auch eine Referenz auf a ist.

Als nächstes erstellen Sie eine schwache Referenz über schwachref.ref(). Nach dem Drucken der Referenzanzahl über getrefcount wird festgestellt, dass sich die Anzahl nicht geändert hat.

w() ist ein Dieser Satz bedeutet, festzustellen, ob die beiden Instanzen genau gleich sind, dh ob sie dieselbe Speicheradresse belegen.

Dann verwenden wir del a, um a auf das x-Objekt zu dereferenzieren. Beachten Sie, dass del hier das x-Objekt nicht direkt recycelt, sondern es dereferenziert Recyceln. Das x-Objekt wird also nach dem Aufruf von del recycelt.

Durch den vorherigen Code können wir sehen, dass die Methode zum Aufrufen schwacher Referenzen eine funktionsähnliche Methode ist. Sie können jedoch stattdessen einen Proxy verwenden, um ihn über einen Variablennamen aufzurufen.

Ein einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen)

An diesem Punkt glaube ich, dass ich die Verwendung schwacher Referenzen definitiv gemeistert habe. Aber was genau macht eine schwache Referenz?

Wie viele andere Hochsprachen verfügt auch Python über einen Garbage-Collection-Mechanismus. Jedes Objekt verfügt über einen Referenzzähler, und wenn dieser Zähler 0 erreicht, kann das Objekt sicher zerstört werden.

Da jeweils nur ein Objekt recycelt werden kann, kann die Referenzzählung keine Objekte mit Zirkelverweisen recyceln. Eine Reihe von Objekten, die aufeinander verweisen, bleibt für immer bestehen, wenn sie nicht direkt von anderen Objekten referenziert werden und nicht zugänglich sind.

Ein Speicherverlust tritt auf, wenn eine Anwendung weiterhin solche Gruppen unzugänglicher Objekte generiert.

Daher eignen sich schwache Referenzen sehr gut für die Handhabung solcher Zirkelreferenzszenarien.

Das obige ist der detaillierte Inhalt vonEin einfaches Verständnis der Python-Referenzzählung und schwacher Referenzen (mit Beispielen). 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