Considerar:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Entonces, avanzar el iterador es, como se esperaba, manejado mutando ese mismo objeto.
Siendo este el caso, esperaría:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
para omitir cada segundo elemento: la llamada a nextdebe avanzar el iterador una vez, luego la llamada implícita realizada por el bucle debe avanzar por segunda vez, y se le asignará el resultado de esta segunda llamada i.
No lo hace. El bucle imprime todos los elementos de la lista, sin omitir ninguno.
Mi primer pensamiento fue que esto podría suceder porque el bucle invoca iterlo que se pasa, y esto podría dar un iterador independiente; este no es el caso, como lo hemos hecho iter(a) is a.
Entonces, ¿por qué nextno parece avanzar el iterador en este caso?