Dalam Python (2 dan 3). Setiap kali kita menggunakan daftar slicing, ia mengembalikan objek baru, misalnya:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Keluaran
>>> 140344378384464
>>> 140344378387272
Jika hal yang sama diulangi dengan tuple, objek yang sama dikembalikan, misalnya:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Keluaran
>>> 140344379214896
>>> 140344379214896
Akan lebih bagus jika seseorang dapat menjelaskan mengapa ini terjadi, sepanjang pengalaman Python saya, saya mendapat kesan slice kosong mengembalikan objek baru.
Pemahaman saya adalah bahwa ia mengembalikan objek yang sama karena tupel tidak berubah dan tidak ada gunanya membuat salinan baru. Tetapi sekali lagi, itu tidak disebutkan dalam dokumen di mana pun.
l2 = tuple(iter(l1))
bypass optimasi
PyTuple_GetSlice
didokumentasikan secara tidak akurat setelah melihat pertanyaan Anda. Documents kini telah diperbaiki (ini adalah bpo issue38557 ).