logo

sizeof in Python

Quando scriviamo script di grandi dimensioni o codice composto da molte righe, la gestione della memoria dovrebbe essere la nostra massima priorità. Pertanto, dovremmo avere una buona conoscenza della gestione efficiente della memoria oltre a una buona conoscenza della programmazione. Abbiamo molte funzioni fornite in Python per ottenere la dimensione in memoria di un particolare oggetto presente nel programma, e una di queste funzioni è __sizeof__(). In questo tutorial impareremo la funzione __sizeof__() e il suo funzionamento all'interno di un programma Python.

Funzione Python __sizeof__()

La funzione __sizeof__() in Python non ci dice esattamente la dimensione dell'oggetto. Non restituisce la dimensione di un oggetto generatore poiché Python non può dirci in anticipo quanta dimensione è un generatore. Tuttavia, in realtà, restituisce la dimensione interna di un particolare oggetto (in byte) che occupa la memoria.

Per capirlo, guardiamo il seguente programma di esempio con un oggetto generatore infinito.

Esempio 1: Guarda il seguente programma 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__()) 

Produzione

denominazione convenzioni Java
 Internal memory size of endless generator object: 120 

Spiegazione:

Abbiamo utilizzato una funzione predefinita, ovvero infiniteGenerator(), per creare un oggetto generatore infinito nel programma. Nella funzione abbiamo inizializzato una variabile, ovvero counting = 0. Abbiamo utilizzato un ciclo while sulla variabile counting senza fornire un punto di interruzione nel ciclo. Creando un ciclo infinito nella funzione, abbiamo reso la funzione predefinita come oggetto generatore infinito. Infine, abbiamo stampato la dimensione della memoria interna dell'oggetto generatore infinito utilizzando la funzione __sizeof__().

sql in ordine per data

Ora possiamo comprendere chiaramente il funzionamento della funzione __sizeof__(). Poiché l'oggetto generatore infinito nel programma precedente non ha alcuna fine o punto di interruzione, Python non può dirci in anticipo la dimensione del generatore. Ma allo stesso tempo, possiamo controllare la dimensione della memoria interna assegnata all'oggetto generatore dalla funzione __sizeof__() poiché deve occupare una parte della memoria interna in Python.

Diamo un'occhiata a un altro esempio in cui utilizziamo la funzione __sizeof__() per ottenere la dimensione della memoria interna senza alcun sovraccarico.

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

Produzione

 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 

Spiegazione:

Utilizzando la funzione __sizeof__(), possiamo vedere chiaramente che la dimensione della memoria interna di una lista vuota è di 40 byte e ogni elemento presente nella lista aggiunge 8 byte alla dimensione di memoria totale della lista.