Есть xs = [1, 2, 3], it = iter(xs), затем it2 = iter(it). Какое утверждение верно?

Ait2 ссылается на тот же итератор, что и it, и разделяет с ним состояние
Bit2 представляет независимый итератор от iter(xs) с обходом заново
Cit2 оказывается копией списка xs, эквивалентной вызову list(it)
Dit2 превращается в кортеж со всеми оставшимися элементами xs
Правильный ответ. iter() от уже существующего итератора возвращает тот же объект, так что общее состояние сохраняется.

Разбор

Итераторы в Python реализуют метод __iter__, возвращающий self. Поэтому iter(it) отдаёт тот же объект it, а не новый итератор и не копию данных. После it2 = iter(it) оба имени указывают на один и тот же итератор, и любой next(it2) сдвигает позицию, видимую и через it. Чтобы получить независимый обход, нужно сделать новый итератор, например iter(xs) ещё раз.

Проверь себя · 1/3разбор после ответа
Функция-генератор squares(n) делает yield i * i для i из range(n). Чему равно list(squares(3))?
Тренировать Python в Telegram

Ещё вопросы по теме «Итераторы и генераторы»