Un iterable est n'importe quoi sur lequel vous pouvez itérer (une liste, une chaîne, un dict) ; un iterator est l'objet qui effectue l'itération réelle, produisant des valeurs une par une et suivant sa position. Cette distinction sous-tend le fonctionnement des boucles for en Python.
Les deux protocoles
Iterable → has __iter__() → returns an iterator
Iterator → has __next__() → returns the next value (and __iter__ returning itself)
