Pythonでは、オブジェクトのバイト数(メモリ消費量)を調べる方法があります。これは、プログラムのメモリ使用量を把握し、最適化するために役立ちます。
オブジェクトのバイト数を調べる方法
Pythonでは、オブジェクトのバイト数を調べるために __sizeof__()
メソッドや sys.getsizeof()
関数を使用します。
__sizeof__()
メソッドを使用する
オブジェクトの __sizeof__()
メソッドを呼び出すことで、そのオブジェクトのサイズをバイト単位で取得することができます。
i = 1
print(f'{type(i)}: {i.__sizeof__()}')
f = 1.0
print(f'{type(f)}: {f.__sizeof__()}')
s = 'abc'
print(f'{type(s)}: {s.__sizeof__()}')
l = [1, 2, 3]
print(f'{type(l)}: {l.__sizeof__()}')
t = (1, 2, 3)
print(f'{type(t)}: {t.__sizeof__()}')
sys.getsizeof()
関数を使用する
sys
モジュールの getsizeof()
関数を使うことでもオブジェクトのサイズをバイト単位で確認することができます。この関数は、オブジェクトの __sizeof__()
メソッドを呼び出しています。
import sys
i = 1
print(f'{type(i)}: {sys.getsizeof(i)}')
f = 1.0
print(f'{type(f)}: {sys.getsizeof(f)}')
s = 'abc'
print(f'{type(s)}: {sys.getsizeof(s)}')
l = [1, 2, 3]
print(f'{type(l)}: {sys.getsizeof(l)}')
t = (1, 2, 3)
print(f'{type(t)}: {sys.getsizeof(t)}')
注意点
__sizeof__()
と sys.getsizeof()
では、サイズが異なる場合があります。sys.getsizeof()
は、ガベージコレクタのフィールド分だけサイズを追加するからその分だけ大きくなることがあるからです。
また、取得したサイズには、参照しているオブジェクトのサイズまでは含まれません。例えば、リストの要素が異なっていてもサイズに変化はありません。
以上がPythonでオブジェクトのバイト数を調べる方法になります。これらの方法を使って、Pythonプログラムのメモリ使用量を把握し、最適化することができます。