Что такое итератор и итерируемый объект?
В экосистеме Python понятия итерируемого объекта и итератора тесно связаны, но выполняют разные роли в процессе обхода коллекций. Итерируемый объект — это любая структура данных, по элементам которой можно пройтись в цикле for, например, списки, строки, словари или файлы. Такой объект знает, как предоставить доступ к своим элементам, но сам по себе состояние текущего шага не хранит.
Итератор, в свою очередь, представляет собой самостоятельный объект состояния, который помнит текущую позицию и знает, как получить следующий элемент.
Чтобы четко понимать разницу и механику работы этих сущностей, рассмотрим по шагам, как устроен процесс итерации под капотом:
Важно отметить, что любые генераторы функций и выражений также являются итераторами, так как они лениво вычисляют значения на лету и расходуют минимальное количество оперативной памяти.