An iterator is an object that yields values, but is not necessarily associated to an in-memory datastructure containing all the values to be yielded. A list, by contrast, is fully constructed and resident in memory. Basically, iterators are usually more memory efficient, and often more performant than the same data created as an in-memory structure, as all per-element calculation can be done when the element is accessed instead of front-loaded, and all the elements don't need to be resident in memory.