Wenn wir große Skripte oder Code mit vielen Zeilen schreiben, sollte die Speicherverwaltung für uns höchste Priorität haben. Daher sollten wir neben guten Programmierkenntnissen auch über gute Kenntnisse im effizienten Umgang mit Speicher verfügen. In Python gibt es viele Funktionen, um die Speichergröße eines bestimmten im Programm vorhandenen Objekts zu ermitteln, und eine dieser Funktionen ist __sizeof__(). In diesem Tutorial lernen wir die Funktion __sizeof__() und ihre Funktionsweise in einem Python-Programm kennen.
Python-Funktion __sizeof__()
Die Funktion __sizeof__() in Python sagt uns nicht genau die Größe des Objekts. Es gibt nicht die Größe eines Generatorobjekts zurück, da Python uns nicht im Voraus sagen kann, wie groß ein Generator ist. Tatsächlich wird jedoch die interne Größe für ein bestimmtes Objekt (in Bytes) zurückgegeben, das den Speicher belegt.
Um dies zu verstehen, schauen wir uns das folgende Beispielprogramm mit einem Endlosgeneratorobjekt an.
Beispiel 1: Schauen Sie sich das folgende Python-Programm an:
# 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__())
Ausgabe
Internal memory size of endless generator object: 120
Erläuterung:
Wir haben eine Standardfunktion, nämlich unlimitedGenerator(), verwendet, um ein Endlosgeneratorobjekt im Programm zu erstellen. In der Funktion haben wir eine Variable initialisiert, d. h. counting = 0. Wir haben eine while-Schleife für die counting-Variable verwendet, ohne einen Haltepunkt für die Schleife anzugeben. Durch die Erstellung einer Endlosschleife in der Funktion haben wir die Standardfunktion als Endlosgeneratorobjekt erstellt. Schließlich haben wir die interne Speichergröße des Endlosgeneratorobjekts mithilfe der Funktion __sizeof__() gedruckt.
Jetzt können wir die Funktionsweise der Funktion __sizeof__() klar verstehen. Da das Endlosgeneratorobjekt im obigen Programm keinen End- oder Haltepunkt hat, kann Python uns die Größe des Generators nicht im Voraus mitteilen. Aber gleichzeitig können wir die interne Speichergröße überprüfen, die dem Generatorobjekt durch die Funktion __sizeof__() zugewiesen wird, da es in Python internen Speicher belegen muss.
Schauen wir uns ein weiteres Beispiel an, bei dem wir die Funktion __sizeof__() verwenden, um die interne Speichergröße ohne Overhead zu ermitteln.
Beispiel 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__())
Ausgabe
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
Erläuterung:
Mithilfe der Funktion __sizeof__() können wir deutlich erkennen, dass die interne Speichergröße einer leeren Liste 40 Byte beträgt und jedes in der Liste vorhandene Element 8 Byte zur Gesamtspeichergröße der Liste hinzufügt.