Ceci est un exemple de l'interpréteur Python 3.8.0 (cependant, il est similaire en 3.7.5)
>>> import sys
>>> sys.getsizeof(int)
416
>>> sys.getsizeof(float)
416
>>> sys.getsizeof(list)
416
>>> sys.getsizeof(Tuple)
416
>>> sys.getsizeof(dict)
416
>>> sys.getsizeof(bool)
416
getsizeof()
retourne combien d'octets Python consomme avec la surcharge du ramasse-miettes (voir ici ). Quelle est la raison pour laquelle la base python consomment la même quantité de mémoire?
Si nous regardons les instances de ces classes
>>> import sys
>>> sys.getsizeof(int())
24
>>> sys.getsizeof(float())
24
L'argument par défaut est 0
Et ces deux instances ont la même quantité de mémoire utilisée pour cet argument. Cependant, si j'essaie d'ajouter un argument
>>> sys.getsizeof(int(1))
28
>>> sys.getsizeof(float(1))
24
et c'est là que ça devient étrange. Pourquoi l'utilisation de la mémoire d'instance augmente-t-elle pour int mais pas pour le type float?
En regardant la documentation , il est important de noter que:
Seule la consommation de mémoire directement attribuée à l'objet est prise en compte, pas la consommation de mémoire des objets auxquels il se réfère.
Que pouvez-vous déduire du fait que la valeur renvoyée de sys.getsizeof(int(1))
est supérieure à celle de sys.getsizeof(float(1))
?
Simplement qu'il faut plus de mémoire pour représenter un int
que pour représenter un float
. Est-ce surprenant? Eh bien, peut-être pas, si nous pouvons nous attendre à "faire plus de choses" avec un int
qu'avec un float
. Nous pouvons évaluer la "quantité de fonctionnalités" au premier degré en regardant le nombre de leurs attributs:
>>> len(dir(int))
70
>>> len(dir(float))
57