range vs. list size


Showing that the range object remains the same size regardless of the size of the range, but if we convert it into a list then its memory footprint is proportional to its size. To the number of elements in it.

In this example we have a loop iterating over range(21), but that's only for the convenience, the interesting part is inside the loop. On every iteration call range() with the current number, then we convert the resulting object into a list of numbert. Finally we print out the current number and the size of both the object returned by range() and the list generated from the object. As you can see the memory usage of the range object remains the same 48 byttes, while the memory usage of the list growth as the list gets longer.


examples/functional/range_size.py
import sys

for ix in range(21):
    rng = range(ix)
    numbers = list(rng)
    print("{:>3} {:>3} {:>4}".format(
        ix,
        sys.getsizeof(rng),
        sys.getsizeof(numbers)))

  0  48   64
  1  48   96
  2  48  104
  3  48  112
  4  48  120
  5  48  128
  6  48  136
  7  48  144
  8  48  160
  9  48  192
 10  48  200
 11  48  208
 12  48  216
 13  48  224
 14  48  232
 15  48  240
 16  48  256
 17  48  264
 18  48  272
 19  48  280
 20  48  288