大規模なスクリプトや行数の多いコードを作成する場合、メモリ管理を最優先事項にする必要があります。したがって、プログラミングに関する十分な知識に加えて、メモリを効率的に処理するための十分な知識が必要です。 Python には、プログラム内に存在する特定のオブジェクトのメモリ内のサイズを取得する関数が多数あります。そのような関数の 1 つが __sizeof__() です。このチュートリアルでは、__sizeof__() 関数と Python プログラム内でのその動作について学びます。
Python __sizeof__() 関数
Python の __sizeof__() 関数は、オブジェクトのサイズを正確に示しません。 Python はジェネレーターのサイズを事前に知ることができないため、ジェネレーター オブジェクトのサイズは返しません。それでも、実際には、メモリを占有している特定のオブジェクトの内部サイズ (バイト単位) を返します。
これを理解するために、無限ジェネレーター オブジェクトを使用した次のサンプル プログラムを見てみましょう。
例 1: 次の Python プログラムを見てください。
# A default function with endless generator object in it def endlessGenerator(): # A counting variable to initialize the generator counting = 0 # Using while loop to create an endless generator while True: yield counting counting += 1 # Creating infinite loop # Printing memory size of a generator object print('Internal memory size of endless generator object: ', endlessGenerator.__sizeof__())
出力
Internal memory size of endless generator object: 120
説明:
アルファベットの数字
デフォルト関数、つまり、endlessGenerator() を使用して、プログラム内にエンドレス ジェネレーター オブジェクトを作成しました。関数では、変数を初期化しました (つまり、counting = 0)。ループにブレークポイントを与えずに、counting 変数に対して while ループを使用しました。関数内に無限ループを作成することで、デフォルト関数を無限ジェネレーター オブジェクトとして作成しました。最後に、__sizeof__() 関数を使用して、エンドレス ジェネレーター オブジェクトの内部メモリ サイズを出力しました。
これで、__sizeof__() 関数の機能が明確に理解できました。上記のプログラムの無限ジェネレーター オブジェクトには終了点やブレークポイントがないため、Python はジェネレーターのサイズを事前に知ることができません。しかし同時に、ジェネレーター オブジェクトが Python の内部メモリを占有しているはずなので、__sizeof__() 関数によってジェネレーター オブジェクトに割り当てられた内部メモリ サイズを確認できます。
__sizeof__() 関数を使用してオーバーヘッドなしで内部メモリ サイズを取得するもう 1 つの例を見てみましょう。
例 2:
# Define an empty list in the program emptyList = [] # Printing size of empty list print('Internal memory size of an empty list: ', emptyList.__sizeof__()) # Define some lists with elements a = [24] b = [24, 26, 31, 6] c = [1, 2, 6, 5, 415, 9, 23, 29] d = [4, 5, 12, 3, 2, 9, 20, 40, 32, 64] # Printing internal memory size of lists print('Memory size of first list: ', a.__sizeof__()) print('Memory size of second list: ', b.__sizeof__()) print('Memory size of third list: ', c.__sizeof__()) print('Memory size of fourth list: ', d.__sizeof__())
出力
Internal memory size of an empty list: 40 Memory size of first list: 48 Memory size of second list: 104 Memory size of third list: 104 Memory size of fourth list: 136
説明:
__sizeof__() 関数を使用すると、空のリストの内部メモリ サイズが 40 バイトであり、リスト内に存在するすべての要素によってリストの合計メモリ サイズに 8 バイトのサイズが追加されることが明確にわかります。