Em Python (2 e 3). Sempre que usamos o fatiamento de lista, ele retorna um novo objeto, por exemplo:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Resultado
>>> 140344378384464
>>> 140344378387272
Se a mesma coisa é repetida com tupla, o mesmo objeto é retornado, por exemplo:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Resultado
>>> 140344379214896
>>> 140344379214896
Seria ótimo se alguém pudesse esclarecer por que isso está acontecendo. Ao longo da minha experiência com o Python, fiquei com a impressão de que a fatia vazia retorna um novo objeto.
Meu entendimento é que ele está retornando o mesmo objeto que as tuplas são imutáveis e não há sentido em criar uma nova cópia dele. Mas, novamente, isso não é mencionado nos documentos em nenhum lugar.
l2 = tuple(iter(l1))
ignora a otimização
PyTuple_GetSlice
foi documentada incorretamente depois de ver sua pergunta. Os documentos foram corrigidos (foi o problema bpo38557 ).