Viele von ihnen sind nicht genau Iteratoren, sondern spezielle Ansichtsobjekte. Zum Beispiel gibt range() jetzt etwas zurück, das dem alten xrange-Objekt ähnlich ist - es kann immer noch indiziert werden, aber konstruiert die Ganzzahlen nach Bedarf.
Ähnlich dict.keys() gibt ein dict_keys-Objekt, das eine Ansicht auf dem Dict implementiert, statt eine neue Liste mit einer Kopie der Schlüssel zu erstellen.
Wie sich das auf Speicherabdrücke auswirkt, hängt wahrscheinlich vom Programm ab. Sicherlich gibt es mehr Betonung auf die Verwendung von Iteratoren, außer Sie brauchen wirklich Listen, wohingegen die Verwendung von Listen im Allgemeinen der Standardfall in python2 ist. Dies wird dazu führen, dass das durchschnittliche Programm wahrscheinlich speichereffizienter ist. Fälle, in denen es wirklich große Einsparungen gibt, werden wahrscheinlich bereits als Iteratoren in Python2-Programmen implementiert, da eine wirklich große Speicherbelegung hervorstechen wird und eher wahrscheinlich bereits angesprochen wird. (z. B. der Datei-Iterator ist bereits viel mehr Speicher effizienter als die ältere file.readlines()
Methode)
Konvertieren wird von der 2to3-Tool durchgeführt, und wird in der Regel Dinge wie range() zu Iteratoren konvertieren, wo es sicher eine echte Liste isn bestimmen kann ‚t benötigt, so Code wie:
for x in range(10): print x
auf den neuen Bereich() Objekt wechseln wird, nicht mehr eine Liste erstellen, und so wird erhalten, um den reduzierten Speicher Nutzen, aber Code wie:
x = range(20)
wird wie folgt konvertiert:
x = list(range(20))
wie der Konverter nicht wissen kann, ob der Code ein in x echten Liste Objekt erwartet.