logo

sizeof i Python

När vi skriver stora skript eller kod med många rader bör minneshantering vara vår högsta prioritet. Därför bör vi ha goda kunskaper om att hantera minnet effektivt förutom goda programmeringskunskaper. Vi har många funktioner som ges i Python för att få storleken i minnet av ett visst objekt som finns i programmet, och en av sådana funktioner är __sizeof__(). I den här handledningen kommer vi att lära oss om funktionen __sizeof__() och dess funktion i ett Python-program.

10 1 miljoner

Python __sizeof__() funktion

Funktionen __sizeof__() i Python berättar inte exakt storleken på objektet. Det returnerar inte storleken på ett generatorobjekt eftersom Python inte kan berätta för oss hur stor en generator är. Ändå, i verkligheten, returnerar den den interna storleken för ett visst objekt (i byte) som upptar minnet.

För att förstå detta, låt oss titta på följande exempelprogram med ett ändlöst generatorobjekt.

Exempel 1: Titta på följande Python-program:

 # 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__()) 

Produktion

 Internal memory size of endless generator object: 120 

Förklaring:

Vi har använt en standardfunktion, d.v.s. endlessGenerator(), för att skapa ett ändlöst generatorobjekt i programmet. I funktionen har vi initierat en variabel, det vill säga räkning = 0. Vi har använt en while-loop på räknevariabeln utan att ge en brytpunkt på slingan. Genom att skapa en oändlig loop i funktionen har vi gjort standardfunktionen som ett oändligt generatorobjekt. Slutligen har vi skrivit ut den interna minnesstorleken för det ändlösa generatorobjektet genom att använda funktionen __sizeof__() .

Nu kan vi tydligt förstå hur funktionen __sizeof__() fungerar. Eftersom det ändlösa generatorobjektet i programmet ovan inte har någon slut- eller brytpunkt, kan Python inte berätta för oss storleken på generatorn i förväg. Men samtidigt kan vi kontrollera den interna minnesstorleken som tilldelats generatorobjektet med funktionen __sizeof__() eftersom det måste uppta en del internminne i Python.

Låt oss titta på ytterligare ett exempel där vi använder funktionen __sizeof__() för att få storleken på det interna minnet utan extra kostnader.

Exempel 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__()) 

Produktion

 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 

Förklaring:

Genom att använda funktionen __sizeof__() kan vi tydligt se att den interna minnesstorleken för en tom lista är 40 byte och varje element som finns i listan lägger till 8 bytes storlek till listans totala minnesstorlek.