この記事では、Python の参照カウントと弱参照について簡単に理解できます (例付き)。一定の参照価値があります。困っている友人は参照できます。お役に立てれば幸いです。
前に書いた:
これまでのソケットシリーズは、主に学んだことの要約と記録を目的として終了しました。
次に、libevent に基づいて同時実行をサポートする HTTP サーバーを作成する予定です。研究会のマスターが以前にHTTPとWebSocketの両方に対応したサーバーを開発していたので、それを読んでとても興味を持ち、このネットワークプログラミングの本を買って読んでみました。私は彼を参考にして合理化されたバージョンを書くつもりです。
は HTTP のみをサポートします。書き終わったらみんなで共有できるので、本番環境では使えませんが、ソースコードを覚えれば自分にとっても大きな成長になると思います。
次にトピックに入ります:
最初にサンプルコードを置きます:
テスト用にコードを作成します。 x オブジェクトにはコンストラクターとデストラクターが含まれます。
x オブジェクトは初めて初期化され、変数 a によって参照されるため、ここでの参照カウントは 1 です。次に、getrefcount を通じて参照の数を取得します。関数 getrefcount の呼び出し自体も a への参照であるため、ここでは 2 になります。
次に、weakref.ref() で弱い参照を作成し、getrefcount で参照カウントを出力した後、カウントが変化していないことがわかります。
w() は、2 つのインスタンスがまったく同じであるかどうか、つまり、同じメモリ アドレスを占有しているかどうかを判断することを意味します。
次に、del a を使用して a を x オブジェクトに逆参照します。ここでの del は x オブジェクトを直接リサイクルするのではなく、逆参照することに注意してください。変数の参照が 0 になると、変数は 0 になることがわかっています。リサイクルします。したがって、x オブジェクトは del を呼び出した後にリサイクルされます。
前のコードを通して、弱参照を呼び出すメソッドがクラス関数のメソッドであることがわかります。ただし、プロキシを使用して、代わりに変数名を使用して呼び出すこともできます。
この時点で、弱参照の使い方を確実にマスターできたと思います。しかし、弱い参照は正確には何をするのでしょうか?
他の多くの高級言語と同様、Python にもガベージ コレクション メカニズムがあります。各オブジェクトには参照カウントがあり、このカウントが 0 に達すると、オブジェクトを安全に破棄できます。
一度にリサイクルできるオブジェクトは 1 つだけであるため、参照カウントでは循環参照のあるオブジェクトをリサイクルできません。相互に参照する一連のオブジェクトは、他のオブジェクトから直接参照されず、アクセスできない場合、永久に存続します。
アプリケーションがこのようなアクセスできないオブジェクト グループを生成し続けると、メモリ リークが発生します。
したがって、弱い参照は、この種の循環参照シナリオの処理に非常に適しています。
以上がPython の参照カウントと弱い参照の簡単な理解 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。