I was playing around with sys
's getsizeof()
and found that False
(or 0
) consists of less bytes than True
(or 1
). Why is that?
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
In fact, other numbers (also some that consist of more than one digit) are 28 bytes.
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
Even more: sys.getsizeof(999999999)
is also 28 bytes! sys.getsizeof(9999999999)
, however, is 32.
So what's going on? I assume that the booleans True
and False
are internally converted to 0
and 1
respectively, but why is zero different in size from other lower integers?
Side question: is this specific to how Python (3) represents these items, or is this generally how digits are presented in the OS?