Tout en Python est un objet. De sorte que la taille d'un int en Python sera plus grande que d'habitude.
>>> sys.getsizeof(int())
24
OK, mais pourquoi faut-il plus de 12 octets pour 2⁶³
comparativement trop 2⁶³ - 1
, et pas seulement un?
>>> sys.getsizeof(2**63)
36
>>> sys.getsizeof(2**62)
24
Je reçois 2⁶³
est une longue et 2⁶³-1
un int, mais pourquoi 12 octets de la différence?
Pas plus intuitif, j'ai essayé quelques autres choses:
>>> a = 2**63
>>> a -= 2**62
>>> sys.getsizeof(a)
36
a
sont toujours stockées en tant que long, même si il pourrait être dans un int maintenant. Ce n'est donc pas surprenant. Mais:
>>> a -= (2**63 - 1)
>>> a = 2**63
>>> a -= (2**63 - 1)
>>> a
1L
>>> sys.getsizeof(a)
28
Une nouvelle taille.
>>> a = 2**63
>>> a -= 2**63
>>> a
0L
>>> sys.getsizeof(a)
24
De retour de 24 octets, mais toujours avec une longue.
Dernière chose que j'ai eu:
>>> sys.getsizeof(long())
24
Question:
Comment fonctionne le stockage de la mémoire de travail dans ces scénarios?
Sous-questions:
Pourquoi est-il un écart de 12 octets pour ajouter ce que notre intuition nous dit, c'est juste 1 peu?
Pourquoi sont - int()
et long()
24 octets, mais long(1)
est déjà 28 octets et int(2⁶²)
?
NB: Python 3.X fonctionne un peu différemment, mais pas de manière plus intuitive. Ici, je me suis concentré sur Python 2.7; je n'ai pas tester sur les versions antérieures.