Warum muss Pythons itertools.cycle eine Kopie der iterablen Datei erstellen?

Die Dokumentation zu Pythons itertools.cycle () enthält eine Pseudocode-Implementierung wie folgt:

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

Im Folgenden heißt es: "Beachten Sie, dass dieses Mitglied des Toolkits möglicherweise erheblichen zusätzlichen Speicher benötigt (abhängig von der Länge der Iterationsdatei)."

Ich bin im Grunde genommen diesen Weg gegangen, außer dass ich dies getan habe, wofür keine Kopie der iterablen Datei erstellt werden muss:

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

druckt:

1
2
3
1
2
3

Ja, mir ist klar, dass meine Implementierung für strs nicht funktionieren würde, aber es könnte gemacht werden. Ich bin neugieriger, warum es eine weitere Kopie erstellt. Ich habe das Gefühl, es hat mit Garbage Collection zu tun, aber ich bin in diesem Bereich von Python nicht gut ausgebildet.

Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage