Một iterable là bất cứ thứ gì bạn có thể lặp qua (một list, string, dict); một iterator là đối tượng thực hiện việc duyệt thực sự, sinh ra các giá trị một lần một cái và theo dõi vị trí của nó. Sự phân biệt này nằm dưới cách các vòng lặp for hoạt động trong Python.
Hai giao thức
Iterable → có __iter__() → trả về một iterator
Iterator → có __next__() → trả về giá trị tiếp theo (và __iter__ trả về chính nó)
