How range() Works — Lazy, Not a List

Published:
Last updated:
By Jeferson Peter
Python

Imagine you need a sequence of numbers, like 0 to 9.
Instead of storing them all in memory, Python’s range() creates a lightweight object that generates numbers only when needed.


Basic usage

print(range(5))
print(list(range(5)))

# range(0, 5)
# [0, 1, 2, 3, 4]

range(5) is not a list — it’s a special iterable.


Iterating with range

for i in range(3):
    print(i)

# 0
# 1
# 2

Memory efficiency

import sys

big_range = range(1_000_000)
big_list = list(range(1_000_000))

print(sys.getsizeof(big_range))
print(sys.getsizeof(big_list))

# Small size for range object
# Much larger size for list

Conclusion

  • range() creates a lazy sequence.
  • It saves memory compared to lists.
  • Use it whenever you just need to iterate numbers.