Struktur data yang hidup selama program berjalan pasti berubah: keranjang bertambah item, stok berkurang, dan data salah entri perlu diperbaiki. Python menyediakan banyak method mutasi, dan sebagian besar bug pemula muncul karena tertukar antara method yang mirip — append() dengan extend(), atau remove() dengan pop(). Chapter ini memetakan seluruh operasi penambahan, pengubahan, dan penghapusan pada list, set, dan dictionary beserta galat yang menyertainya.

List: append, insert, dan extend #

Ketiga method ini sama-sama menambah elemen, tetapi dengan bentuk masukan yang berbeda. append() memasukkan satu elemen apa adanya di akhir, insert() menyisipkan pada indeks tertentu, dan extend() membuka isi iterable lalu memasukkan setiap elemennya satu per satu.

python
menu = ["nasi goreng"]

menu.append("mie ayam")
print(menu)

menu.insert(0, "es teh")
print(menu)

menu.extend(["sate", "bakso"])
print(menu)

menu.append(["soto", "rawon"])  # append memasukkan satu elemen apa adanya
print(menu)

Output yang Dihasilkan:

text
['nasi goreng', 'mie ayam']
['es teh', 'nasi goreng', 'mie ayam']
['es teh', 'nasi goreng', 'mie ayam', 'sate', 'bakso']
['es teh', 'nasi goreng', 'mie ayam', 'sate', 'bakso', ['soto', 'rawon']]

Baris terakhir memperlihatkan jebakan yang paling sering terjadi: menu.append(["soto", "rawon"]) memasukkan list itu sendiri sebagai satu elemen, bukan dua string terpisah. Inilah perbedaan kunci append() versus extend() — append() menerima satu objek, extend() menguraikan isi iterable.

List: del, pop, dan remove #

Untuk penghapusan, pemilihan method ditentukan oleh dua hal: apakah kita tahu posisi atau nilainya, dan apakah nilai yang dihapus perlu dipakai kembali.

AlatBerdasarkanMengembalikan nilai yang dihapusCocok untuk
del list[i]indekstidakmembuang elemen tanpa dipakai
list.pop(i)indeksyamengambil sekaligus menghapus
list.remove(x)nilaitidakmenghapus kemunculan pertama nilai x
python
angka = [10, 20, 30, 40, 50]

del angka[0]
print(angka)

diambil = angka.pop(1)
print(diambil)
print(angka)

angka.remove(40)
print(angka)

terakhir = angka.pop()
print(terakhir)
print(angka)

Output yang Dihasilkan:

text
[20, 30, 40, 50]
30
[20, 40, 50]
[20, 50]
50
[20]

Perhatikan baris diambil = angka.pop(1): elemen indeks 1 (nilainya 30) dikeluarkan dari list dan sekaligus tersimpan ke variabel diambil. Tanpa argumen indeks, pop() mengambil elemen terakhir — pola khas untuk struktur antrean dan tumpukan.

Satu detail penting dari remove(): method ini hanya menghapus kemunculan pertama. Jika nilai muncul beberapa kali, sisa kemunculannya tetap berada di dalam list dan perlu beberapa kali pemanggilan untuk membersihkan semuanya.

Set: add, discard, dan remove #

Penambahan elemen set memakai add() (bukan append() — set tidak punya posisi akhir). Untuk penghapusan, pilihannya discard() dan remove() dengan perbedaan yang sudah dibahas pada Chapter *Set: discard()tenang saat elemen tidak ada,remove()memunculkanKeyError`.

python
peserta = {"budi", "siti"}
peserta.add("agus")
peserta.discard("riri")  # tidak error meski elemen tidak ada
print(sorted(peserta))

Output yang Dihasilkan:

text
['agus', 'budi', 'siti']

Karena set tidak punya konsep posisi, method pop() pada set justru menghapus elemen sembarang — perilaku yang membingungkan dan sebaiknya dihindari. Batasi diri pada discard() dan remove() saat menghapus isi set.

Dictionary: menambah, mengubah, del, dan pop #

Operasi dictionary berpusat pada key: penugasan d[key] = nilai menambah pasangan baru atau menimpa nilai lama, update() menggabungkan banyak perubahan sekaligus, del menghapus pasangan, dan pop() menghapus sambil mengembalikan nilainya.

python
harga = {"apel": 5000, "jeruk": 3000}
harga["mangga"] = 7500  # tambah key baru
harga["apel"] = 6000    # ubah nilai lama
print(harga)

dihapus = harga.pop("jeruk")
print(dihapus)
print(harga)

del harga["apel"]
print(harga)

Output yang Dihasilkan:

text
{'apel': 6000, 'jeruk': 3000, 'mangga': 7500}
3000
{'apel': 6000, 'mangga': 7500}
{'mangga': 7500}

Galat yang Sering Muncul #

Tiga jenis exception hampir selalu muncul dalam operasi mutasi. Mengenali bentuknya sejak dini mempercepat proses debugging — penanganannya secara rapi akan dibahas pada Section Exception Handling.

python
>>> angka = [1, 2, 3]
>>> angka[5]
Traceback (most recent call last):
  ...
IndexError: list index out of range
>>> angka.remove(99)
Traceback (most recent call last):
  ...
ValueError: list.remove(x): x not in list
>>> harga = {"apel": 5000}
>>> harga["durian"]
Traceback (most recent call last):
  ...
KeyError: 'durian'

Pemetaan ringkas ketiganya:

ExceptionPemicuPencegahan
IndexErrorindeks di luar jangkauancek len() atau gunakan .get() untuk dictionary
ValueErrorremove() nilai yang tidak adaperiksa dengan in sebelum menghapus
KeyErrorkey tidak ditemukangunakan .get(), in, atau pop(key, cadangan)