How would you go about finding out how much memory is being used by an object? I know it is possible to find out how much is used by a block of code, but not by an instantiated object (anytime during its life), which is what I want.
5 に答える
これを試して:
sys.getsizeof(object)
getsizeof()オブジェクトのサイズをバイト単位で返します。オブジェクトのメソッドを呼び出し、オブジェクトがガベージ コレクターによって管理されている場合__sizeof__
は、ガベージ コレクターのオーバーヘッドが追加されます。
Python オブジェクトのメモリ サイズを簡単に調べる方法はありません。あなたが見つけるかもしれない問題の 1 つは、Python オブジェクト (リストや辞書など) が他の Python オブジェクトへの参照を持っている可能性があることです (この場合、あなたのサイズは? 各オブジェクトのサイズを含むサイズかどうか?)。オブジェクト型とガベージ コレクションに関連するいくつかのポインター オーバーヘッドと内部構造があります。最後に、一部の python オブジェクトには自明ではない動作があります。たとえば、ほとんどの場合、リストは自分が持っているよりも多くのオブジェクト用にスペースを予約します。辞書はさまざまな方法で動作する可能性があるため、さらに複雑です (少数のキーに対して異なる実装があり、場合によってはエントリを過剰に割り当てます)。
メモリ内のPython オブジェクトのサイズを最適に概算するために、大量のコード(および更新された大量のコード) が存在します。
また、PyObject (実質的にすべての Python オブジェクトを表す内部 C 構造体)に関する古い説明を確認することもできます。
私は次のいずれかについて個人的な経験はありませんが、「Python [メモリ] プロファイラー」を単純に検索すると、次のようになります。
http://pysizer.8325.org/にある「Python 用のメモリ プロファイラ」である PySizer 。ただし、ページは、プロジェクトがしばらく更新されていないことを示しているようで、参照しています...
http://guppy-pe.sourceforge.net/#Heapyにある Heapy、「Python プログラムのメモリ関連の問題に関するデバッグと最適化をサポートしています」 。
それが役立つことを願っています。