In Python (2 und 3). Immer wenn wir List Slicing verwenden, wird ein neues Objekt zurückgegeben, z.
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Ausgabe
>>> 140344378384464
>>> 140344378387272
Wenn dasselbe mit Tupel wiederholt wird, wird dasselbe Objekt zurückgegeben, z.
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Ausgabe
>>> 140344379214896
>>> 140344379214896
Es wäre großartig, wenn jemand etwas Licht ins Dunkel bringen könnte, warum dies geschieht. Während meiner gesamten Python-Erfahrung hatte ich den Eindruck, dass ein leeres Slice ein neues Objekt zurückgibt.
Mein Verständnis ist, dass es dasselbe Objekt zurückgibt, da Tupel unveränderlich sind und es keinen Sinn macht, eine neue Kopie davon zu erstellen. Aber auch hier wird es nirgendwo in den Dokumenten erwähnt.
l2 = tuple(iter(l1))
umgeht die Optimierung
PyTuple_GetSlice
ungenau dokumentiert wurde, nachdem Ihre Frage angezeigt wurde. Die Dokumente wurden jetzt behoben (dies war das bpo-Problem 38557 ).