Почему в Python itertools.cycle нужно создавать копию итерируемого?

Документация для Python itertools.cycle () дает реализацию псевдокода в виде:

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

Ниже говорится: «Обратите внимание, что этот элемент инструментария может потребовать значительного вспомогательного хранения (в зависимости от длины итерируемого)».

Я в основном шел по этому пути, за исключением того, что я сделал это, что не требует создания копии итерируемого:

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

печатает:

1
2
3
1
2
3

Да, я понимаю, что моя реализация не будет работать для str, но это может быть сделано для. Мне более любопытно, почему он создает еще одну копию. У меня есть чувство, что это связано со сборкой мусора, но я не очень хорошо изучен в этой области Python.

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос