Un iterable este orice lucru pe care poți face o buclă (o listă, string, dict); un iterator este obiectul care face iterația reală, producând valori una câte una și urmărind poziția sa. Această distincție stă la baza modului în care funcționează buclele for în Python.
Cele două protocoale
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
