Nah, seperti yang telah ditunjukkan Trufa, pada dasarnya ada dua cara untuk mengganti elemen tupel pada indeks tertentu. Ubah tupel menjadi daftar, ganti elemen dan ubah kembali, atau buat tupel baru dengan penggabungan.
In [1]: def replace_at_index1(tup, ix, val):
...: lst = list(tup)
...: lst[ix] = val
...: return tuple(lst)
...:
In [2]: def replace_at_index2(tup, ix, val):
...: return tup[:ix] + (val,) + tup[ix+1:]
...:
Jadi, metode mana yang lebih baik, yaitu lebih cepat?
Ternyata untuk tupel pendek (pada Python 3.3), penggabungan sebenarnya lebih cepat!
In [3]: d = tuple(range(10))
In [4]: %timeit replace_at_index1(d, 5, 99)
1000000 loops, best of 3: 872 ns per loop
In [5]: %timeit replace_at_index2(d, 5, 99)
1000000 loops, best of 3: 642 ns per loop
Namun jika kita melihat tupel yang lebih panjang, konversi daftar adalah cara yang harus dilakukan:
In [6]: k = tuple(range(1000))
In [7]: %timeit replace_at_index1(k, 500, 99)
100000 loops, best of 3: 9.08 µs per loop
In [8]: %timeit replace_at_index2(k, 500, 99)
100000 loops, best of 3: 10.1 µs per loop
Untuk tupel yang sangat panjang, konversi daftar jauh lebih baik!
In [9]: m = tuple(range(1000000))
In [10]: %timeit replace_at_index1(m, 500000, 99)
10 loops, best of 3: 26.6 ms per loop
In [11]: %timeit replace_at_index2(m, 500000, 99)
10 loops, best of 3: 35.9 ms per loop
Selain itu, kinerja metode penggabungan bergantung pada indeks tempat kita mengganti elemen. Untuk metode daftar, indeks tidak relevan.
In [12]: %timeit replace_at_index1(m, 900000, 99)
10 loops, best of 3: 26.6 ms per loop
In [13]: %timeit replace_at_index2(m, 900000, 99)
10 loops, best of 3: 49.2 ms per loop
Jadi: Jika tupel Anda pendek, potong dan gabungkan. Jika sudah lama, lakukan konversi daftar!