En Python (2 et 3). Chaque fois que nous utilisons le découpage de liste, il renvoie un nouvel objet, par exemple:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Production
>>> 140344378384464
>>> 140344378387272
Si la même chose est répétée avec tuple, le même objet est retourné, par exemple:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Production
>>> 140344379214896
>>> 140344379214896
Ce serait formidable si quelqu'un pouvait faire la lumière sur la raison pour laquelle cela se produit, tout au long de mon expérience Python, j'avais l'impression que la tranche vide renvoie un nouvel objet.
Ma compréhension est qu'il retourne le même objet que les tuples sont immuables et il n'y a aucun intérêt d'en créer une nouvelle copie. Mais encore une fois, cela n'est mentionné nulle part dans les documents.
l2 = tuple(iter(l1))
contourne l'optimisation
PyTuple_GetSlice
été documenté de manière inexacte après avoir vu votre question. Les documents ont maintenant été corrigés (c'était le problème bpo38557 ).