¿Por qué Python's itertools.cycle necesita crear una copia del iterable?

La documentación para itertools.cycle () de Python proporciona una implementación de pseudo-código como:

def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element

A continuación, indica: "Nota, este miembro del kit de herramientas puede requerir un almacenamiento auxiliar significativo (dependiendo de la longitud del iterable)".

Básicamente estaba siguiendo este camino, excepto que hice esto, lo cual no requiere crear una copia de lo iterable:

def loop(iterable):
    it = iterable.__iter__()

    while True:
        try:
            yield it.next()
        except StopIteration:
            it = iterable.__iter__()
            yield it.next()

x = {1, 2, 3}

hard_limit = 6
for i in loop(x):
    if hard_limit <= 0:
        break

    print i
    hard_limit -= 1

huellas dactilares:

1
2
3
1
2
3

Sí, me doy cuenta de que mi implementación no funcionaría para str, pero podría hacerse para. Tengo más curiosidad por saber por qué crea otra copia. Tengo la sensación de que tiene que ver con la recolección de basura, pero no estoy bien estudiado en esta área de Python.

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta