logo

sizeof in Python

Wanneer we grote scripts of code van veel regels schrijven, moet geheugenbeheer onze hoogste prioriteit hebben. Daarom moeten we naast goede programmeerkennis ook goede kennis hebben van het efficiënt omgaan met geheugen. We hebben in Python veel functies gegeven om de grootte in het geheugen te krijgen van een bepaald object dat in het programma aanwezig is, en een van dergelijke functies is __sizeof__(). In deze tutorial leren we over de functie __sizeof__() en de werking ervan in een Python-programma.

Python __sizeof__()-functie

De functie __sizeof__() in Python vertelt ons niet precies de grootte van het object. Het retourneert niet de grootte van een generatorobject, omdat Python ons niet van tevoren kan vertellen hoeveel grootte een generator heeft. Toch retourneert het in werkelijkheid de interne grootte van een bepaald object (in bytes) dat het geheugen in beslag neemt.

Laten we, om dit te begrijpen, naar het volgende voorbeeldprogramma kijken met een eindeloos generatorobject.

Voorbeeld 1: Kijk naar het volgende Python-programma:

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

Uitvoer

 Internal memory size of endless generator object: 120 

Uitleg:

We hebben een standaardfunctie gebruikt, namelijk eindelozeGenerator(), om een ​​eindeloos generatorobject in het programma te maken. In de functie hebben we een variabele geïnitialiseerd, d.w.z. tellen = 0. We hebben een while-lus op de telvariabele gebruikt zonder een breekpunt op de lus te geven. Door een oneindige lus in de functie te creëren, hebben we de standaardfunctie gemaakt als een eindeloos generatorobject. Ten slotte hebben we de interne geheugengrootte van het eindeloze generatorobject afgedrukt met behulp van de functie __sizeof__().

Nu kunnen we de werking van de functie __sizeof__() duidelijk begrijpen. Omdat het eindeloze generatorobject in het bovenstaande programma geen eind- of breekpunt heeft, kan Python ons niet vooraf de grootte van de generator vertellen. Maar tegelijkertijd kunnen we de interne geheugengrootte controleren die aan het generatorobject is toegewezen door de functie __sizeof__(), omdat deze een deel van het interne geheugen in Python in beslag moet nemen.

Laten we nog een voorbeeld bekijken waarin we de functie __sizeof__() gebruiken om de interne geheugengrootte te verkrijgen zonder enige overhead.

volledig optelcircuit

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

Uitvoer

 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 

Uitleg:

Met behulp van de functie __sizeof__() kunnen we duidelijk zien dat de interne geheugengrootte van een lege lijst 40 bytes is en dat elk element in de lijst 8 bytes aan de totale geheugengrootte van de lijst toevoegt.