Iterable to wszystko, co możesz przeiterować (lista, string, dict); iterator to obiekt, który faktycznie wykonuje iterację, produkując wartości jeden po jednym i śledząc swoją pozycję. Ta distinkcja wyjaśnia, jak działają pętle for w Python.
Dlaczego to ważne
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
