logo

sizeof en Python

Quan estem escrivint scripts grans o codi de moltes línies, la gestió de la memòria hauria de ser la nostra màxima prioritat. Per tant, hauríem de tenir un bon coneixement de la gestió de la memòria de manera eficient, a més d'un bon coneixement de programació. Tenim moltes funcions donades a Python per obtenir la mida a la memòria d'un objecte particular present al programa, i una d'aquestes funcions és __sizeof__(). En aquest tutorial, aprendrem sobre la funció __sizeof__() i el seu funcionament dins d'un programa Python.

cadena java adjunta

Funció Python __sizeof__().

La funció __sizeof__() a Python no ens indica exactament la mida de l'objecte. No retorna la mida d'un objecte generador, ja que Python no ens pot dir per endavant la mida d'un generador. Tot i així, en realitat, retorna la mida interna d'un objecte particular (en bytes) que ocupa la memòria.

Per entendre-ho, mirem el programa d'exemple següent amb un objecte generador sense fi.

Exemple 1: Mireu el següent programa 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__()) 

Sortida

 Internal memory size of endless generator object: 120 

Explicació:

Hem utilitzat una funció predeterminada, és a dir, endlessGenerator(), per crear un objecte generador sense fi al programa. A la funció, hem inicialitzat una variable, és a dir, comptant = 0. Hem utilitzat un bucle while a la variable de comptatge sense donar un punt d'interrupció al bucle. En crear un bucle infinit a la funció, hem fet que la funció predeterminada sigui un objecte generador sense fi. Finalment, hem imprès la mida de la memòria interna de l'objecte generador sense fi mitjançant la funció __sizeof__().

linux $home

Ara, podem entendre clarament el funcionament de la funció __sizeof__(). Com que l'objecte generador sense fi del programa anterior no té cap final ni punt d'interrupció, Python no ens pot indicar la mida del generador per endavant. Però al mateix temps, podem comprovar la mida de memòria interna assignada a l'objecte generador per la funció __sizeof__() ja que ha d'ocupar una mica de memòria interna a Python.

Vegem un exemple més on fem servir la funció __sizeof__() per obtenir la mida de la memòria interna sense cap sobrecàrrega.

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

Sortida

format de cadena en java
 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 

Explicació:

Utilitzant la funció __sizeof__(), podem veure clarament que la mida de memòria interna d'una llista buida és de 40 bytes i cada element present a la llista afegeix 8 bytes a la mida total de memòria de la llista.