Command Palette

Search for a command to run...

Pemrograman AI

Immutable, Mutable, dan Identity

List dan Mutabilitas

Dalam Python, list merupakan struktur data yang dapat diubah setelah dibuat. Mari kita pahami bagaimana perilaku list ketika kita melakukan operasi tertentu.

Ketika kamu membuat sebuah list dan menyimpannya dalam variabel, Python tidak menyalin isi list tersebut. Sebaliknya, variabel tersebut menyimpan referensi atau alamat memori tempat list berada. Bayangkan seperti alamat rumah, variabel hanya menyimpan alamat, bukan rumahnya sendiri.

Pythonlist_reference.py
# Membuat list dan memberikan referensilist1 = [0, 1, 2]list2 = ['a', list1, True]print(list2)  # ['a', [0, 1, 2], True]# Mengubah elemen dalam list1list1[1] = [3, 4, 5]print(list2)  # ['a', [0, [3, 4, 5], 2], True]

Perhatikan bagaimana perubahan pada list1 juga mempengaruhi list2. Ini terjadi karena list2 tidak menyimpan salinan list1, melainkan referensi ke objek list yang sama di memori.

Operasi Slice Menciptakan Salinan Baru

Berbeda dengan assignment biasa, operasi slice pada list akan menciptakan objek list baru di memori. Kamu dapat membuktikan ini dengan menggunakan fungsi id() yang mengembalikan alamat memori objek.

Pythonslice_copy.py
# Operasi slice menciptakan list barulist1 = [0, 1, 2]list2 = list1[:]  # Mengambil semua elemen dengan sliceprint(id(list1))  # Contoh: 3104print(id(list2))  # Contoh: 8864 (berbeda dari list1)# Mengubah elemen di list2 tidak mempengaruhi list1list2[0] = 'x'print(list1)  # [0, 1, 2] (tidak berubah)print(list2)  # ['x', 1, 2]

Identitas, Tipe, dan Nilai Objek

Setiap objek dalam Python memiliki tiga karakteristik penting yang membedakannya dari objek lain.

Mermaidmermaid
Loading

Identitas Objek

Identitas adalah alamat memori unik tempat objek disimpan. Python menyediakan fungsi id() untuk melihat identitas objek dan operator is untuk membandingkan identitas dua objek.

Pythonobject_identity.py
a = 300print(a)          # 300print(type(a))    # <class 'int'>print(id(a))      # 10120b = a  # b mereferensi objek yang sama dengan aprint(id(b))      # 10120 (sama dengan a)a = a + 1  # Membuat objek baruprint(id(a))      # 10492 (berbeda dari sebelumnya)

Perbandingan Identitas dan Nilai

Python memiliki optimisasi khusus untuk integer kecil (biasanya 5-5 sampai 256256). Integer dalam rentang ini menggunakan objek yang sama di memori untuk menghemat ruang.

Pythonidentity_comparison.py
# Integer besar mungkin menggunakan objek berbedaa = 300b = 300print(a is b)      # Mungkin True atau False (tergantung implementasi)print(a == b)      # True (nilai sama)# Integer dalam rentang -5 sampai 256 biasanya samaa = 100b = 100print(a is b)      # True (optimisasi untuk integer kecil)print(a == b)      # True (nilai sama)

Objek Mutable dan Immutable

Python mengklasifikasikan objek berdasarkan kemampuannya untuk diubah setelah dibuat.

Objek Immutable

Objek immutable tidak dapat diubah setelah dibuat. Setiap operasi yang tampak mengubah objek sebenarnya menciptakan objek baru.

Pythonimmutable_objects.py
# Integer adalah immutablea = 300print(id(a))  # 10120a = a + 1     # Membuat objek baruprint(id(a))  # 10492 (berbeda)# String juga immutablestr_var = 'hello'print(id(str_var))  # 75568# Mencoba mengubah string akan menghasilkan error# str_var[1] = 'a'  # TypeError

Tipe data immutable dalam Python meliputi:

  • bool (boolean)
  • int (integer)
  • float (floating point)
  • complex (bilangan kompleks)
  • str (string)
  • tuple (tuple)

Objek Mutable

Objek mutable dapat diubah setelah dibuat tanpa menciptakan objek baru. Identitas objek tetap sama meskipun nilainya berubah.

Pythonmutable_objects.py
# List adalah mutablelist_var = [0, 1, 2]print(id(list_var))  # 15296# Mengubah elemen tidak mengubah identitas objeklist_var = [0, 0, 0]print(id(list_var))  # 60960 (objek baru karena assignment)# Modifikasi in-place mempertahankan identitaslist_var[:] = ['a', 'b', 'c']print(id(list_var))  # 60960 (sama)

Tipe data mutable dalam Python meliputi:

  • list (list)
  • dict (dictionary)
  • set (set)

Perilaku Assignment vs Modifikasi

Penting untuk membedakan antara assignment (pemberian nilai baru) dan modifikasi in-place.

Pythonassignment_vs_modification.py
list1 = [0, 1, 2]list2 = list1  # Kedua variabel mereferensi objek yang samaprint(id(list1))     # 700print(id(list2))     # 700 (sama)# Modifikasi in-place mempengaruhi kedua variabellist1[1] = 'x'print(list1)         # [0, 'x', 2]print(list2)         # [0, 'x', 2] (ikut berubah)# Assignment membuat referensi barulist1 = [1, 2, 3]print(list1)         # [1, 2, 3]print(list2)         # [0, 'x', 2] (tidak berubah)
Mermaidmermaid
Loading

Pemahaman tentang mutabilitas sangat penting dalam pemrograman Python. Objek immutable lebih aman untuk digunakan dalam konteks multi-threading karena tidak dapat diubah, sedangkan objek mutable memberikan fleksibilitas untuk memodifikasi data secara efisien tanpa menciptakan objek baru setiap kali.