Selain list, Python punya dua wadah lagi. Tuple adalah daftar berurutan yang dikunci: setelah dibuat, isinya gak bisa diubah. Set adalah kumpulan nilai unik tanpa urutan. Bayangin dua benda di Warung Kopi Pak Darto. Tuple itu struk yang sudah dicetak: urutannya tetap, dan tulisannya gak bisa dicoret. Set itu cap "sudah terjual" di papan menu: kopi susu dipesan tiga kali, tapi capnya tetap satu, dan cap-cap itu gak punya nomor urut.
🧪 Tebakan cepat:
terjual = {"kopi susu", "teh manis", "kopi susu"}, laluprint(len(terjual)). Hasilnya 3 atau 2? Tebak dulu, jawabannya ada di bagian "Set: tiap nilai cuma sekali".
Tuple: daftar yang dikunci
struk = ("kopi susu", 15000)
print(struk) # ('kopi susu', 15000)
print(struk[0]) # kopi susu
print(len(struk)) # 2
print(type(struk)) # <class 'tuple'>
- Tuple ditulis dengan kurung biasa
( ), isinya dipisah koma. - Membacanya sama seperti list: indeks mulai dari 0, indeks negatif, slicing,
len(), danin. - Bedanya, tuple immutable: gak bisa diubah setelah dibuat. Mengganti satu item ditolak:
Traceback (most recent call last):
File "/home/darto/warung.py", line 2, in <module>
struk[1] = 12000
~~~~~^^^
TypeError: 'tuple' object does not support item assignment
- Tuple juga gak punya method yang mengubah isi.
struk.append("es teh")gagal denganAttributeError: 'tuple' object has no attribute 'append'. - Kenapa dikunci? Untuk data yang memang gak boleh berubah diam-diam: pasangan nama dan harga di struk, koordinat lokasi warung, atau beberapa nilai yang dikembalikan fungsi sekaligus.
Unpacking: membongkar tuple
struk = ("kopi susu", 15000)
nama, harga = struk
print(nama) # kopi susu
print(harga) # 15000
nama, harga = strukmengisinamadengan item pertama danhargadengan item kedua. Ini disebut unpacking.- Jumlah variabelnya harus sama dengan jumlah item.
nama, harga, jumlah = strukgagal denganValueError: not enough values to unpack (expected 3, got 2). - Kamu sudah memakainya:
for nama, harga in menu.items():di pelajaran dictionary membongkar tuple(key, value)di tiap putaran. Fungsi yang menulisreturn termurah, termahaljuga sebenarnya mengembalikan satu tuple. - Tuple satu item butuh koma:
(42,). Tanpa koma,(42)cuma angka 42 di dalam kurung, tipenyaint.
Set: tiap nilai cuma sekali
terjual = {"kopi susu", "teh manis", "kopi susu"}
print(len(terjual)) # 2
pesanan = ["kopi susu", "teh manis", "kopi susu", "roti bakar", "kopi susu"]
menu_laku = set(pesanan)
print(len(pesanan), len(menu_laku)) # 5 3
print("teh manis" in menu_laku) # True
- Set ditulis dengan kurung kurawal
{ }tanpa titik dua, atau dibuat dari list denganset(...). - Nilai yang sama cuma disimpan sekali.
kopi susuyang kedua dibuang, jadilen(terjual)adalah 2. Itu jawaban tebakannya. set(pesanan)cara cepat membuang duplikat: 5 pesanan, tapi cuma 3 menu yang berbeda..add(x)menambah satu nilai,.remove(x)membuangnya (danKeyErrorkalauxgak ada).
Set gak punya urutan. Untuk teks, urutan cetaknya bahkan bisa beda tiap kali program dijalankan:
$ python3 warung.py
{'kopi susu', 'teh manis'}
$ python3 warung.py
{'teh manis', 'kopi susu'}
Karena gak ada urutan, gak ada indeks juga. terjual[0] ditolak dengan TypeError: 'set' object is not subscriptable. Butuh urutan yang pasti? sorted(terjual) membuat list yang urut.
Operasi himpunan
Pak Darto mencatat nomor meja yang pesan kopi dan nomor meja yang pesan roti:
meja_kopi = {1, 2, 3, 4}
meja_roti = {3, 4, 5, 6}
print(meja_kopi & meja_roti) # {3, 4}
print(meja_kopi | meja_roti) # {1, 2, 3, 4, 5, 6}
print(meja_kopi - meja_roti) # {1, 2}
| Operator | Nama | Artinya di warung |
|---|---|---|
a & b |
irisan (intersection) | meja yang pesan kopi dan roti |
a | b |
gabungan (union) | meja yang pesan kopi atau roti |
a - b |
selisih (difference) | meja yang pesan kopi tapi gak pesan roti |
Hasilnya selalu set baru. Jadi {1, 2, 3, 4} & {3, 4, 5, 6} adalah {3, 4}: nilai yang ada di kedua set.
Kapan pakai yang mana
| Wadah | Ditulis | Urutan dan indeks | Bisa diubah | Nilai dobel |
|---|---|---|---|---|
| list | [ ] |
ada | ya | boleh |
| tuple | ( ) |
ada | tidak | boleh |
| set | { } atau set() |
gak ada | ya, lewat .add dan .remove |
dibuang |
| dict | {key: value} |
urutan masuk, dicari lewat key | ya | key gak boleh dobel |
Perbedaan utama tuple dan list cuma satu: tuple immutable, list mutable.
⚠️ Jebakan yang sering ketemu
- Tuple satu item tanpa koma.
x = (42)adalahint, bukan tuple. Tulis(42,). {}kosong dikira set.{}adalah dictionary kosong. Set kosong ditulisset().- Mengandalkan urutan set. Urutan cetaknya bisa berubah, dan
terjual[0]adalahTypeError: 'set' object is not subscriptable. Pakaisorted(terjual)kalau butuh urutan. - Jumlah variabel unpacking gak pas.
nama, harga = ("kopi susu", 15000, 2)gagal denganValueError: too many values to unpack (expected 2).
TL;DR: Tuple ( ) berurutan seperti list tapi immutable: struk[1] = 12000 jadi TypeError: 'tuple' object does not support item assignment, dan itulah beda utama tuple dan list. Unpacking nama, harga = struk membongkar tuple ke beberapa variabel, dan tuple satu item ditulis (42,). Set { } menyimpan nilai unik tanpa urutan dan tanpa indeks: duplikat dibuang, urutan cetaknya bisa beda tiap run, dan set kosong ditulis set(). Operasi himpunan: & irisan, | gabungan, - selisih, jadi {1, 2, 3, 4} & {3, 4, 5, 6} adalah {3, 4}.