iterable je sve što možete petljati (lista, string, dict); iterator je objekt koji obavlja stvarnu iteraciju, proizvodeći vrijednosti jednu po jednu i praćeći svoju poziciju. Ta razlika je osnova kako for petlje funkcioniraju u Pythonu.
Dva protokola
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
