In Python (2 e 3). Ogni volta che utilizziamo la suddivisione in elenchi restituisce un nuovo oggetto, ad esempio:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Produzione
>>> 140344378384464
>>> 140344378387272
Se la stessa cosa si ripete con la tupla, viene restituito lo stesso oggetto, ad es .:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Produzione
>>> 140344379214896
>>> 140344379214896
Sarebbe bello se qualcuno potesse far luce sul perché ciò sta accadendo, durante la mia esperienza con Python ero sotto l'impressione che la fetta vuota restituisse un nuovo oggetto.
La mia comprensione è che sta restituendo lo stesso oggetto in quanto le tuple sono immutabili e non ha senso crearne una nuova copia. Ma ancora una volta, non è menzionato nei documenti da nessuna parte.
l2 = tuple(iter(l1))
ignora l'ottimizzazione
PyTuple_GetSlice
stato documentato in modo impreciso dopo aver visto la tua domanda. I documenti sono stati corretti (questo era il problema bpo38557 ).