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