私はPythonのための公式文書を見てきましたが、私は参照サイクルが何かを見つけることができないようです。私はGCモジュールを理解しようとしているので、誰もが私のために何を明確にしてください。あなたの返信を先にありがとう。Pythonのリファレンスサイクルとは何ですか?
16
A
答えて
15
参照サイクルは単に参照する1つ以上のオブジェクトを意味します。つまり、依存関係を表す矢印付きの用紙に描画すると、サイクルが表示されます。
a.other = b
b.some_attr = a
ナイーブガベージコレクタはオブジェクトが他のオブジェクトによって参照されているか否かのオフ厳密動作:
(ほぼ)最も単純な基準周期は、互いに参照する2つのオブジェクトa
とb
を有しています。この場合、a
とb
の両方が参照されていない場合、それらは依然として互いに参照し、ナイーブなガベージコレクタはメモリを再利用できません。 (Pythonはいえ、参照サイクルによりトラップできるかどうかはわからない。)
EDITを:今ここ
a = []
a.append(a)
10
これは基準サイクルである:
l = []
l.append(l)
l
の最初の要素、すなわちl[0]
は、今l
自体に環状の参照です。
3
>>> x=[1,2,3]
>>> x.append(x)
>>> x
[1, 2, 3, [...]]
>>>
:最も単純な基準サイクルは、それ自体を参照するオブジェクトであります変数x
はそれ自体を参照していますが、これは参照サイクルと呼ばれます。
7
>>> aRef = []
>>> aRef.append(aRef)
>>> print aRef
[[...]]
これは、aRef
という名前の変数によって参照されるリストオブジェクトを作成します。リストオブジェクト内のfirst element
は、それ自体への参照です。この場合、リストオブジェクトに対してdel aRef
参照を逆参照aRef
とします。しかし、リスト・オブジェクトの参照カウントはゼロまで減少せず、リスト・オブジェクトは依然として自身を参照しているので、リスト・オブジェクトはガベージ・コレクションされない。この場合、Pythonのガベージコレクタは循環参照が存在するか定期的にチェックし、インタプリタはそれを収集します。以下は、循環参照オブジェクトが使用する空間を手動で収集する例です。
>>> import gc
>>> gc.collect()
0
>>> del aRef
>>> gc.collect()
1
>>> gc.collect()
0
関連する問題
- 1. これは強力なリファレンスサイクルかメモリリークですか?
- 2. PythonのPythonとは何ですか?
- 3. "$ python"とは何ですか?
- 4. Pythonでは、グローバルステートメントとは何ですか?
- 5. Pythonでは "\ 00"とは何ですか?
- 6. OSXのPythonイメージビューアとは何ですか?
- 7. Pythonのメタクラスベースとは何ですか?
- 8. Pythonの「モデルオブジェクト」とは何ですか?
- 9. Pythonのフリーズプロセスとは何ですか?
- 10. Pythonの式とは何ですか?
- 11. Pythonのプロトタイピングとは何ですか?
- 12. Python GUI:tkinterの 'スクリーンユニット'とは何ですか?
- 13. Pythonスクリプトで%{__ python34}とは何ですか?
- 14. Pythonで '%% file test.py'とは何ですか?
- 15. Pythonでdeconstructible doとは何ですか?
- 16. Pythonでasyncとは何ですか?
- 17. Python:ヘッダとは何ですか?
- 18. Python Anywhereとは何ですか?
- 19. BDB for Pythonとは何ですか?
- 20. Python - sklearn.pipeline.Pipelineとは何ですか?
- 21. 'Python executable'とは何ですか?
- 22. python 2とpython 3の違いは何ですか?
- 23. アクティブなpythonとpythonの違いは何ですか?
- 24. Python classmethods:インスタンスのメンバとクラスのメンバの違いは何ですか? Pythonでは
- 25. Pythonコードのプロファイリングとパフォーマンステストのベストプラクティスとツールは何ですか?
- 26. Pythonで `round`と` __round__`の違いは何ですか? python 3では
- 27. Pythonでは、パスとリターンの違いは何ですか
- 28. pythonで 'set.intersection()'のアルゴリズムは何ですか?
- 29. Pythonで@staticmethodのポイントは何ですか?
- 30. パッケージのインポートobjと何かの違いをインポートパッケージとPythonの何かの違いは何ですか?