J'ai été jouer avec sys
s' getsizeof()
et a constaté que False
(ou 0
) se compose de moins d'octets que le nombre True
(ou 1
). Pourquoi est-ce?
import sys
print("Zero: " + str(sys.getsizeof(0)))
print("One: " + str(sys.getsizeof(1)))
print("False: " + str(sys.getsizeof(False)))
print("True: " + str(sys.getsizeof(True)))
# Prints:
# Zero: 24
# One: 28
# False: 24
# True: 28
En fait, d'autres numéros (aussi certains qui se composent de plus d'un chiffre) est de 28 octets.
for n in range(0, 12):
print(str(n) + ": " + str(sys.getsizeof(n)))
# Prints:
# 0: 24
# 1: 28
# 2: 28
# 3: 28
# 4: 28
# 5: 28
# 6: 28
# 7: 28
# 8: 28
# 9: 28
# 10: 28
# 11: 28
Même plus: sys.getsizeof(999999999)
est également de 28 octets! sys.getsizeof(9999999999)
, cependant, est de 32.
Alors que ce passe? Je suppose que les opérations booléennes True
et False
sont convertis en interne en 0
et 1
respectivement, mais pourquoi est zéro différents en taille à partir d'autres bas des entiers?
Côté question: est-ce spécifique à la façon Python (3) représente ces éléments, ou est-ce la façon dont les chiffres sont présentés dans l'OS?