Generator expression produces values lazily. List comprehension creates the entire list in memory.
1# List comprehension — creates full list2squares_list = [x**2 for x in range(10_000_000)]3# Uses ~400MB of memory45# Generator expression — produces one at a time6squares_gen = (x**2 for x in range(10_000_000))7# Uses ~200 bytes89# Consuming10for s in squares_gen:11 process(s) # Each value generated on-the-fly1213# Converting to list when needed14result = list(squares_gen)
Key differences:
[], generator does not.When to use generators:
itertools.