1. ホーム
  2. python

[解決済み] Pythonの__weakref__とは一体何ですか?

2023-04-23 22:52:10

質問

意外なことに __weakref__ . 弱い参照は説明されています ここで . __weakref__ のドキュメントでも少し触れています。 __slots__ . しかし、私は __weakref__ 自体については何も見つかりませんでした。

具体的にはどのような __weakref__ ? - フラグとして機能する単なるメンバでしょうか。もし存在すれば、そのオブジェクトは弱く参照されるかもしれません。 - それとも、希望の動作を得るためにオーバーライド/割り当てが可能な関数/変数ですか?どのように?

どのように解決するのですか?

__weakref__ は、現在のオブジェクトへのすべての弱い参照を参照する不透明なオブジェクトに過ぎません。実際のところ、これは weakref (または時々 weakproxy ) は、オブジェクトへの弱い参照であると同時に、そのオブジェクトのすべての弱い参照への二重リンクリストの一部でもあります。

これは、ガベージコレクタがその参照先が収集されたことを弱参照に通知し、その基礎となるポインタへのアクセスをもう許可しないようにするための実装の詳細に過ぎません。

弱い参照は、それが参照するオブジェクトの参照カウントをチェックすることに頼ることはできません。なぜなら、そのメモリは再利用され、現在別のオブジェクトによって使用されている可能性があるからです。最良のシナリオは VM がクラッシュすることですが、最悪の場合、弱い参照は本来参照していなかったオブジェクトへのアクセスを許可することになります。これが、ガベージコレクタが弱参照にその参照はもはや有効でないことを通知しなければならない理由です。

参照 weakrefobject.h を参照して下さい。また、実装の詳細は である。