Mutable dan Immutable dalam Python
Artikel ini menjelaskan tentang mutable dan immutable dalam Python.
YouTube Video
Mutable dan Immutable dalam Python
"Mutable" dan "immutable" merujuk pada kemutabilan suatu objek. Memahami hal ini membantu dalam menghindari bug yang tak terduga dan pengelolaan memori yang efisien.
Apa itu Mutable?
Objek mutable dapat mengubah keadaan internalnya setelah dibuat.
Tipe Data Mutable Utama
list
dict
set
- Kelas yang didefinisikan oleh pengguna (jika atributnya dapat dimodifikasi)
Contoh: Memodifikasi Sebuah List
1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers) # [100, 2, 3]
List adalah objek mutable, dan elemen-elemennya dapat dimodifikasi secara bebas.
Apa itu Immutable?
Objek immutable tidak dapat diubah setelah dibuat. Mencoba mengubahnya akan menghasilkan pembuatan objek baru.
Tipe Data Immutable Utama
int
float
str
tuple
bool
frozenset
Contoh: Memodifikasi Sebuah String
1text = "hello"
2# text[0] = "H" # TypeError: 'str' object does not support item assignment
3
4text = "H" + text[1:] # Creates a new string
5print(text) # "Hello"
String adalah immutable, sehingga Anda tidak dapat memodifikasinya secara parsial.
Perbandingan antara Mutable dan Immutable
1# Mutable example
2a = [1, 2, 3]
3b = a
4b[0] = 100
5print(a) # [100, 2, 3] -> a is also changed
6
7# Immutable example
8x = 10
9y = x
10y = 20
11print(x) # 10 -> x is unchanged
Seperti yang ditunjukkan pada contoh di atas, objek mutable dibagikan melalui referensi, sehingga mereka dapat memengaruhi variabel lain. Di sisi lain, objek yang tidak dapat diubah (immutable) akan membuat instance baru saat dilakukan penugasan ulang, sehingga nilai aslinya tidak terpengaruh.
Memeriksa Perilaku Internal Menggunakan id()
Di Python, Anda dapat menggunakan fungsi id()
untuk memeriksa ID sebuah objek. ID objek mirip dengan alamat memori.
1# Immutable int behavior
2a = 10
3print(id(a)) # e.g., 140715920176592
4a += 1
5print(id(a)) # e.g., 140715920176624 -> ID has changed
6
7# Mutable list behavior
8b = [1, 2, 3]
9print(id(b)) # e.g., 2819127951552
10b.append(4)
11print(id(b)) # Same ID -> only the content has changed
Seperti yang ditunjukkan, objek baru dibuat untuk tipe yang tidak dapat diubah (immutable), sedangkan tipe yang dapat diubah (mutable) dimodifikasi langsung di tempat.
Fungsi dan Kehati-hatian dengan Objek Mutable dan Immutable
Saat meneruskan objek yang dapat diubah (mutable) ke fungsi, data aslinya mungkin akan dimodifikasi.
Contoh: Fungsi yang Memodifikasi Sebuah List
1def modify_list(lst):
2 lst.append(100)
3
4my_list = [1, 2, 3]
5modify_list(my_list)
6print(my_list) # [1, 2, 3, 100]
Contoh: Fungsi yang Memodifikasi Sebuah Angka
Di sisi lain, upaya untuk memodifikasi objek yang tidak dapat diubah (immutable) akan menghasilkan objek baru yang dibuat.
1def modify_number(n):
2 n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number) # 5 -> unchanged
Pertimbangan Praktis
Hindari Menggunakan Objek Mutable sebagai Argumen Default
1# Bad example
2def add_item(item, container=[]):
3 container.append(item)
4 return container
5
6print(add_item(1)) # [1]
7print(add_item(2)) # [1, 2] -> unintended behavior
8
9# Good example
10def add_item(item, container=None):
11 if container is None:
12 container = []
13 container.append(item)
14 return container
Karena argumen default hanya dievaluasi sekali saat pendefinisian fungsi, penggunaan objek mutable dapat menyebabkan efek samping yang tidak terduga.
Ringkasan
Untuk memahami secara mendalam variabel dan tipe data di Python, sangat penting untuk memahami perbedaan antara mutable dan immutable. Memahami karakteristik ini membantu Anda menghindari perilaku yang tidak diinginkan dalam kode Anda dan menulis program yang lebih kuat dan mudah dibaca.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.