8

変数に新しいコンテンツが割り当てられた場合、「古いコンテンツ」に割り当てられたメモリは「適切に」解放されますか? たとえば、次のスクリプトでは、ゼロの配列としての変数「a」のメモリは、「a」に新しいものが割り当てられた後に解放されますか?

import numpy
a = numpy.zeros(1000)
a = a+1

Pythonは、いわゆる「ガベージコレクション」を使用してすべてをきれいに行うのに十分スマートであると想像しますが、実際にはそれを読むことはできません。確認はありますか?私はそれを感謝します。

4

2 に答える 2

9

最終的に古いメモリは解放されますが、いつ解放されるかは予測できません。これは、Python の実装と他の多くの要因に依存します。

とはいえ、あなたが示した例と CPython の実装では、割り当て中に古い配列をガベージ コレクションする必要があります。

(NumPy 配列は、ガベージ コレクターの動作を説明するための特に複雑な例であることに注意してください。)

于 2012-04-04T21:24:52.877 に答える
2

gc モジュールをいじって (そしておそらく微調整して) 答えを見つけることができます。コレクターを無効にし、収集頻度を調整し、デバッグ オプションを設定する機能を提供します。また、コレクターが検出したが解放できない到達不能オブジェクトへのアクセスも提供します。http://docs.python.org/library/gc.htmlを参照してください

于 2012-04-04T21:36:04.267 に答える