Lorsque nous écrivons des scripts volumineux ou du code comportant plusieurs lignes, la gestion de la mémoire doit être notre priorité absolue. Par conséquent, nous devons avoir de bonnes connaissances sur la gestion efficace de la mémoire en plus de bonnes connaissances en programmation. Nous avons de nombreuses fonctions données en Python pour obtenir la taille en mémoire d'un objet particulier présent dans le programme, et l'une de ces fonctions est __sizeof__(). Dans ce didacticiel, nous découvrirons la fonction __sizeof__() et son fonctionnement dans un programme Python.
Fonction Python __sizeof__()
La fonction __sizeof__() en Python ne nous indique pas exactement la taille de l'objet. Il ne renvoie pas la taille d'un objet générateur car Python ne peut pas nous dire à l'avance quelle est la taille d'un générateur. Pourtant, en réalité, il renvoie la taille interne d'un objet particulier (en octets) occupant la mémoire.
Pour comprendre cela, regardons l'exemple de programme suivant avec un objet générateur sans fin.
Exemple 1: Regardez le programme Python suivant :
# 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__())
Sortir
Internal memory size of endless generator object: 120
Explication:
Nous avons utilisé une fonction par défaut, c'est-à-dire sans finGenerator(), pour créer un objet générateur sans fin dans le programme. Dans la fonction, nous avons initialisé une variable, c'est-à-dire counting = 0. Nous avons utilisé une boucle while sur la variable de comptage sans donner de point d'arrêt sur la boucle. En créant une boucle infinie dans la fonction, nous avons fait de la fonction par défaut un objet générateur sans fin. Enfin, nous avons imprimé la taille de la mémoire interne de l'objet générateur sans fin en utilisant la fonction __sizeof__().
Maintenant, nous pouvons clairement comprendre le fonctionnement de la fonction __sizeof__(). Comme l'objet générateur sans fin dans le programme ci-dessus n'a ni fin ni point d'arrêt, Python ne peut pas nous indiquer à l'avance la taille du générateur. Mais en même temps, nous pouvons vérifier la taille de la mémoire interne allouée à l'objet générateur par la fonction __sizeof__() car elle doit occuper de la mémoire interne en Python.
Regardons un autre exemple où nous utilisons la fonction __sizeof__() pour obtenir la taille de la mémoire interne sans aucune surcharge.
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__())
Sortir
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
Explication:
En utilisant la fonction __sizeof__(), nous pouvons clairement voir que la taille de la mémoire interne d'une liste vide est de 40 octets et que chaque élément présent dans la liste ajoute 8 octets à la taille totale de la mémoire de la liste.