Mutable vs Immutable Objects di Python: Konsep Dasar yang Sering Diremehkan

Mutable vs Immutable Objects di Python: Konsep Dasar yang Sering Diremehkan

id9 min read • 642 views

Mutable vs Immutable Objects di Python: Konsep Dasar yang Sering Diremehkan

Di Python, semua variabel sebenarnya hanyalah referensi ke sebuah objek. Ini poin penting yang sering terlewat, terutama oleh pemula yang datang dari bahasa lain seperti C atau Java. Variabel di Python tidak menyimpan nilai secara langsung, melainkan menunjuk ke sebuah objek di memori. Setiap objek tersebut memiliki identity (id), type, dan value.

Python membagi objek menjadi dua kategori besar: mutable dan immutable. Perbedaan ini bukan sekadar teori, tapi sangat berpengaruh pada cara Python bekerja, cara fungsi berperilaku, hingga munculnya bug yang sulit dilacak.

Secara sederhana:

  • Immutable→ objek tidak bisa diubah setelah dibuat
  • Mutable→ objek bisa diubah tanpa membuat objek baru

Memahami perbedaan ini adalah salah satu fondasi penting untuk naik level sebagai Python programmer.

Apa Itu Immutable Objects ?

Immutable objects adalah objek yang state-nya tidak bisa diubah setelah objek tersebut dibuat. Jika kita “mengubah” nilainya, Python sebenarnya membuat objek baru, bukan memodifikasi objek lama.

Tipe data bawaan Python yang termasuk immutable antara lain:

  • int
  • float
  • bool
  • str
  • tuple
  • frozenset

Mari kita lihat contoh klasik menggunakan tuple.

Contoh: Tuple Bersifat Immutable

tuple1 = (0, 1, 2, 3)
tuple1[0] = 4

Kode di atas akan menghasilkan error:

  • TypeError: 'tuple' object does not support item assignment

Ini terjadi karena tuple tidak menyediakan mekanisme untuk mengubah isi internalnya. Begitu tuple dibuat, strukturnya bersifat tetap.

Baca Juga

 

String Juga Immutable (Dan Ini Sering Mengecoh)

String di Python terlihat seperti array karakter, tapi sebenarnya bukan. Setiap kali kita memodifikasi string, Python akan membuat objek string baru.

Contoh: String Tidak Bisa Diubah

message = "Welcome to GeeksforGeeks"
message[0] = 'p'

Hasilnya:

  • TypeError: 'str' object does not support item assignment

Kalau kita ingin “mengubah” string, caranya adalah dengan membuat string baru:

message = "p" + message[1:]
print(message)

Ini bukan mengedit string lama, tapi membuat objek string baru di memori.

 

Apa Itu Mutable Objects ?

Berbeda dengan immutable, mutable objects memungkinkan kita mengubah isi internalnya tanpa membuat objek baru. Identitas objek (id) tetap sama, tapi nilainya berubah.

Tipe mutable yang paling umum di Python:

  • list
  • dict
  • set
  • custom class (umumnya mutable)

Mutable object sangat berguna ketika kita perlu:

  • Menambah atau menghapus data
  • Mengubah struktur data
  • Menyimpan state yang dinamis

 

List di Python Bersifat Mutable

List adalah contoh paling populer dari mutable object.

Contoh: Menambah dan Menghapus Elemen List

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)


my_list.insert(1, 5)
print(my_list)


my_list.remove(2)
print(my_list)


popped_element = my_list.pop(0)
print(my_list)
print(popped_element)

Output:

[1, 2, 3, 4]
[1, 5, 2, 3, 4]
[1, 5, 3, 4]
[5, 3, 4]
1

Di sini, my_list tetap objek yang sama, hanya isinya yang berubah.

 

Dictionary: Mutable dan Sering Jadi Sumber Bug

Dictionary (dict) juga bersifat mutable. Masalah muncul ketika kita menyalin referensi, bukan menyalin objeknya.

Contoh: Reference vs Copy pada Dictionary

my_dict = {"name": "Ram", "age": 25}
new_dict = my_dict
new_dict["age"] = 37


print(my_dict)
print(new_dict)

Output:

{'name': 'Ram', 'age': 37}
{'name': 'Ram', 'age': 37}

Banyak pemula kaget melihat hasil ini. Mereka mengira new_dict adalah salinan, padahal sebenarnya kedua variabel menunjuk ke objek yang sama.

Kalau ingin benar-benar menyalin:

new_dict = my_dict.copy()

 

Set Juga Mutable

Set memungkinkan kita menambah dan menghapus elemen.

my_set = {1, 2, 3}
new_set = my_set
new_set.add(4)


print(my_set)
print(new_set)

Output:

{1, 2, 3, 4}
{1, 2, 3, 4}

Sekali lagi, perubahan pada new_set memengaruhi my_set karena mereka menunjuk ke objek yang sama.

 

Perbedaan Fundamental: Identity vs Value

Untuk benar-benar memahami mutable dan immutable, kita perlu mengenal fungsi id().

Contoh Perbandingan

a = 10
print(id(a))


a = 20
print(id(a))

ID akan berbeda karena integer bersifat immutable.

Bandingkan dengan list:

lst = [1, 2, 3]
print(id(lst))


lst.append(4)
print(id(lst))

ID tetap sama, meskipun isinya berubah.

 

Kenapa Immutable Lebih Aman?

Immutable objects:

  • Lebih aman dari side effect
  • Cocok untuk key dictionary
  • Lebih mudah diprediksi
  • Cocok untuk pemrograman fungsional

Itulah alasan kenapa tuple bisa jadi key dictionary, tapi list tidak.

my_dict = {(1, 2): "valid"}     # OK
my_dict = {[1, 2]: "error"}    # TypeError

 

Mutable Object dan Bug yang “Tak Terlihat”

Banyak bug Python muncul bukan karena syntax error, tapi karena mutability.

Contoh Bug Halus

def add_item(lst):
    lst.append(100)


data = [1, 2, 3]
add_item(data)


print(data)

Output:

[1, 2, 3, 100]

Jika kita tidak sadar bahwa list bersifat mutable, efek samping ini bisa merusak data di banyak tempat.

Solusi aman:

def add_item(lst):
    new_lst = lst.copy()
    new_lst.append(100)
    return new_lst

Exception: Tuple Bisa “Berisi” Mutable Object

Ini bagian yang sering bikin bingung.

tup = ([3, 4, 5], 'myname')
tup[0].append(6)
print(tup)

Output:

([3, 4, 5, 6], 'myname')

Tuple-nya tetap immutable, tapi ia menyimpan referensi ke list, dan list tersebut mutable. Yang berubah bukan tuple-nya, tapi objek di dalamnya.

Rule of Thumb yang Perlu Diingat

Sebagai pedoman praktis:

  • Tipe primitive-like→ biasanya immutable
  • Tipe container-like→ biasanya mutable
  • Kalau ragu, cek dokumentasi atau coba id()

 

Kapan Pakai Mutable, Kapan Pakai Immutable ?

Pemilihan antara mutable dan immutable bukan sekadar soal gaya penulisan kode, tapi soal kontrol terhadap perubahan data. Tipe immutable seperti tuple, frozenset, atau str sangat cocok dipakai ketika data memang tidak boleh berubah sepanjang program berjalan. Ini penting untuk menjaga konsistensi logika, menghindari bug tersembunyi akibat perubahan tak sengaja, dan membuat alur data lebih mudah diprediksi. Karena sifatnya yang stabil, immutable juga aman digunakan sebagai key dictionary atau dikirim lintas fungsi tanpa khawatir terjadi side effect. Dalam sistem yang kompleks, immutable membantu developer berpikir lebih deklaratif: data adalah fakta, bukan objek yang bisa berubah seenaknya.

Sebaliknya, mutable seperti list, dict, atau set lebih masuk akal ketika data memang perlu dimodifikasi secara bertahap. Misalnya saat mengolah data yang ukurannya dinamis, menyimpan state sementara, atau bekerja sebagai buffer yang terus diperbarui. Mutable unggul dari sisi fleksibilitas dan efisiensi, karena tidak perlu membuat objek baru setiap kali ada perubahan. Namun, konsekuensinya adalah developer harus ekstra hati-hati terhadap referensi dan perubahan tak terduga. Intinya sederhana: gunakan immutable untuk keamanan dan kejelasan, gunakan mutable untuk fleksibilitas dan performa. Developer yang matang bukan yang fanatik pada satu jenis, tapi yang tahu kapan harus memilih yang tepat

 

Penutup: Kenapa Topik Ini Penting Banget ?

Mutable vs immutable bukan sekadar teori Python dasar. Ini adalah konsep yang:

  • Menjelaskan kenapa bug muncul “tanpa sebab”
  • Menentukan desain fungsi yang bersih
  • Membantu memahami performa dan memory
  • Jadi fondasi untuk memahami concurrency dan async

Kalau kamu sudah benar-benar paham perbedaan ini—bukan cuma hafal definisinya, tapi ngerti dampaknya—berarti kamu sudah naik level dari “bisa pakai Python” ke “mengerti cara Python berpikir”.

Series: Python
  1. Pengertian dan Kegunaan Bahasa Pemrograman Python
  2. Phyton 1 : Tutorial Pengenalan Dasar
  3. Phyton 2 : Macam Penulisan Sintaks
  4. Phyton 3 : Konsep Variabel dan Data
  5. Phyton 4 - Cara Mengambil Input dan Output
  6. Phyton 5 : Jenis-jenis Operator
  7. Phyton 6 - Percabangan
  8. Phyton 7 - Perulangan
  9. Phyton 8 - Struktur Data List
  10. 4 Variasi Fungsi Print () Pada Phyton
  11. Tutorial Python: Struktur Data Dictionary
  12. Phyton 9 - Struktur Data Tuple
  13. Phyton 9 : Struktur Data Tuple Part 2
  14. 5 Variasi Coding Python dengan Fungsi Concatenate, Yuk, Coba
  15. PyScript: Masa Depan Python di Browser ?
  16. 7 Hal Dasar yang Harus Diketahui Tentang Dictionary pada Python
  17. Memahami Fungsi dan Prosedur pada Python
  18. 6 Proyek Coding Python untuk Meningkatkan Portofolio Anda
  19. Tutorial Python: Membaca dan Menulis File dengan Lebih Mendalam
  20. Cara Baca Dan Parse File CSV di Python
  21. 7 Teknik Membuat Dictionary di Python dengan Data dari Berbagai Sumber
  22. 5 Kesalahan Umum dalam Menggunakan Dictionary di Python dan Cara Menghindarinya
  23. Belajar Python: Proses Data JSON dari File dan API Web
  24. Belajar Python: Buat Fungsi Dengan Lambda Expression
  25. Apa Maksud dari *args dan kwargs pada Python?
  26. Tutorial Membuat 3 Jenis Kalkulator Dengan Python
  27. Panduan Lengkap: Cara Menghapus Item di List Python Tanpa Drama
  28. Cara Bangun Dashboard di Jupyter Pakai Solara
  29. 6 Perintah pip yang Harus Diketahui Setiap Developer Python
  30. Panduan Lengkap Menggunakan pip: Manajer Paket Python yang Wajib Dikuasai
  31. Rekomendasi 6 Framework Terbaik untuk Python: Dari Santai Sampai Superhero!
  32. Benar Nggak Sih Python Ramah untuk Programmer Pemula?
  33. Optimasi Performa Perbandingan Dokumen di Python: Ketika CPU Lo Kerja Rodi!
  34. Mengupas Tuntas Cara Mengiterasi Dictionary di Python: Panduan Lengkap yang Gak Bikin Pusing!
  35. 5 Proyek AI Seru yang Bisa Lo Bangun Weekend Ini dengan Python
  36. Rust vs Python: Duel Sengit Bahasa Pemrograman! Mana yang Cocok Buat Lo?
  37. 6 Trik Python Terbaru 2025 yang Wajib Dicoba Programmer
  38. Tutorial Lengkap Membuat News Aggregator Menggunakan Python
  39. Stop Nulis Function Python Kayak Gini, Bro!
  40. 7 Python Decorators yang Bikin Kode Lo Makin Canggih
  41. Trik Python debugging yang wajib lo coba.
  42. Membangun List di Python: Filosofi, Teknik, dan Tips Anti-Kudet
  43. DERET FAKTORIAL: SI "BAHAN VIRAL" MATEMATIKA YANG BIKIN KODE LO NAIK LEVEL!
  44. Project Python Seru: Bikin Script Otomatisasi Pengorganisir File (Biar Folder Download Nggak Kayak Gudang)
  45. Automating Email Sending Via Phyton – Biar Jempol Lo Pensiun Dini
  46. Project 2: Automating Web Scraping for Data Collection dengan Python
  47. Automatisasi Tugas GUI dengan PyAutoGUI
  48. Cara Lama vs Cara Kekinian: Belajar dataclass Python
  49. Automatisasi Laporan PDF dengan Python
  50. Membongkar Rahasia field() di Python: Kendali Penuh atas Dataclass
  51. Praktik Lanjutan Menulis Kode Python yang Bersih dan Ramah Pemula
  52. Python Function Annotations: Fitur Keren yang Sering Diremehkan, Padahal Bikin Kamu Terlihat Programmer Cerdas
  53. Python Keyword Arguments: Panduan Bad Boy Buat Programmer Biar Nggak Salah Urus Function
  54. Belajar Fungsi Tanpa Parameter Python dari Nol: Panduan Lengkap Buat Pemula Sampai Nyantol di Kepala
  55. Tutorial Coding: Keluar dari Plateau of False Competence di Python
  56. Plotting Graph Menggunakan Seaborn di Python
  57. Mutable vs Immutable Objects di Python: Konsep Dasar yang Sering Diremehkan
  58. Python time.sleep() – Cara Mudah Memberi Jeda pada Program Kamu
  59. Mengapa Saya Berhenti Menggunakan Class di Python (Dan Apa yang Saya Gunakan Sebagai Gantinya)
  60. Different Delay Time of Python sleep() – Mengatur Jeda Sesuai Kebutuhan Program
  61. Mengenal Python math Module: Panduan Lengkap untuk Operasi Matematika di Python
Published on March 16, 2026
Last updated on June 03, 2026

If you like this post and want to support us, you can support us via buymeacoffee or trakteer.