Empat struktur data, empat karakter yang berbeda — dan keputusan memilih yang salah tidak berujung error, melainkan kode yang berjalan lambat, duplikat yang bocor, atau data yang berubah tanpa sengaja. Bab penutup section ini merangkum sifat masing-masing struktur ke dalam satu tabel perbandingan, membuktikan bedanya lewat kode, lalu menutup dengan panduan keputusan yang bisa dipakai setiap kali merancang program.

Perbandingan Empat Struktur Data #

Empat pertanyaan menentukan pilihan: apakah elemennya terurut, boleh diubah, boleh duplikat, dan bagaimana cara mengaksesnya.

StrukturTerurut?Bisa diubah?Duplikat?Akses elemenKasus tipikal
listyayayaindex posisidaftar yang bertumbuh: keranjang, riwayat
tupleyatidakyaindex posisikelompok nilai tetap: koordinat, konstanta
settidakyatidaktidak bisanilai unik, membership test, operasi himpunan
dictionaryya, sesuai penyisipanyakey unikkeypencarian berlabel: harga, konfigurasi

Satu program demonstrasi ringkas memperlihatkan ketiga sifat pembeda secara langsung — list menerima duplikat dan bertambah, tuple terkunci, set merapikan duplikat, dan dictionary memetakan label ke nilai:

python
daftar = [1, 1, 2]
daftar.append(3)
print(daftar)

titik = (1, 1, 2)
print(titik)

unik = {1, 1, 2}
print(sorted(unik))

umur = {"budi": 20, "siti": 21}
print(umur)

Output yang Dihasilkan:

text
[1, 1, 2, 3]
(1, 1, 2)
[1, 2]
{'budi': 20, 'siti': 21}

Pencarian Berlabel: Dictionary versus List Pasangan #

Alasan paling kuat memilih dictionary adalah pencarian. Bandingkan dua representasi tabel harga yang isinya sama persis:

python
harga = {"apel": 5000, "jeruk": 3000, "mangga": 7500}
print(harga.get("jeruk"))

pasangan = [("apel", 5000), ("jeruk", 3000), ("mangga", 7500)]
hasil = None
for nama, nilai in pasangan:
    if nama == "jeruk":
        hasil = nilai
        break
print(hasil)

Output yang Dihasilkan:

text
3000
3000

Representasi dictionary menyelesaikan pencarian dalam satu ekspresi, sedangkan representasi list pasangan membutuhkan loop yang memeriksa elemen satu per satu sampai ketemu. Semakin besar datanya, semakin lebar jurang keduanya.

Performa: Set dan Dictionary versus List #

Ketika pertanyaannya hanyalah “apakah nilai X ada di dalam kumpulan?”, set dan dictionary unggul dengan cara fundamental. List memeriksa keanggotaan dengan memindai elemen dari depan sampai ditemukan — jika ada satu juta elemen dan yang dicari ada di paling belakang, satu juta perbandingan terjadi. Set dan dictionary menghitung posisi nilai lewat hash dan langsung melompat ke tempatnya.

Dalam istilah ilmu komputer: pencarian pada list berjalan dalam waktu O(n) — sebanding jumlah elemen n — sedangkan pencarian pada set dan dictionary rata-rata O(1), konstan berapapun ukurannya. Kode berikut mengukur perbedaannya secara nyata dengan module timeit:

python
import timeit

daftar = list(range(1_000_000))
himpunan = set(daftar)

waktu_list = timeit.timeit(lambda: 999_999 in daftar, number=100)
waktu_set = timeit.timeit(lambda: 999_999 in himpunan, number=100)

print(f"pencarian di list : {waktu_list:.4f} detik")
print(f"pencarian di set  : {waktu_set:.4f} detik")

Output yang Dihasilkan:

text
pencarian di list : 0.8104 detik
pencarian di set  : 0.0000 detik

Panduan Mengambil Keputusan #

Ketika merancang struktur data, ajukan pertanyaan berikut secara berurutan:

  1. Apakah setiap nilai punya label yang melekat? Ya → dictionary (harga["apel"], data siswa per NIS).
  2. Apakah nilai harus unik dan sering diuji keanggotaannya? Ya → set (daftar email, tag artikel, validasi).
  3. Apakah kelompok nilai tidak akan berubah setelah dibuat? Ya → tuple (koordinat, konstanta, key gabungan).
  4. Sisanya → list: urutan yang bisa bertambah, berkurang, dan diurutkan ulang.

Dua pertimbangan penutup yang sering melengkapi keputusan: gunakan nested structure (Chapter Nested Data Structures) saat satu entitas punya banyak atribut; dan waspadai penyalinan struktur bersarang yang membutuhkan deepcopy() (Chapter Shallow Copy dan Deep Copy) agar dua struktur tidak saling bocor. Dengan empat struktur ini dan disiplin memilihnya, hampir seluruh kebutuhan pengelolaan data di Python sudah tercakup — struktur lanjutan seperti collections.Counter dan defaultdict kelak memperluas kotak alat ini pada Section Standard Library.