Boleh Ubah dan Tidak Boleh Ubah dalam Python

Boleh Ubah dan Tidak Boleh Ubah dalam Python

Artikel ini menerangkan mengenai boleh ubah dan tidak boleh ubah dalam Python.

YouTube Video

Boleh Ubah dan Tidak Boleh Ubah dalam Python

Boleh ubah dan tidak boleh ubah merujuk kepada keupayaan objek untuk berubah. Memahami perkara ini membantu dalam mengelakkan pepijat yang tidak dijangka dan pengurusan memori yang cekap.

Apakah Boleh Ubah?

Objek boleh ubah boleh menukar keadaan dalaman mereka selepas dicipta.

Jenis Data Boleh Ubah Utama

  • list
  • dict
  • set
  • Kelas yang ditentukan pengguna (jika atributnya boleh diubah)

Contoh: Mengubah Senarai

1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers)  # [100, 2, 3]

Senarai adalah objek boleh ubah, dan elemen-elemennya boleh diubah dengan bebas.

Apakah Tidak Boleh Ubah?

Objek tidak boleh ubah tidak boleh diubah selepas ia dicipta. Cuba mengubahnya akan menghasilkan penciptaan objek baru.

Jenis Data Tidak Boleh Ubah Utama

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

Contoh: Mengubah 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 tidak boleh ubah, jadi anda tidak boleh mengubahnya secara sebahagian.

Perbandingan antara Boleh Ubah dan Tidak Boleh Ubah

 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 dalam contoh di atas, objek boleh ubah dikongsi melalui rujukan, jadi mereka boleh mempengaruhi pembolehubah lain. Sebaliknya, objek yang tidak boleh diubah membuat contoh baru semasa pengagihan semula, meninggalkan nilai asal tidak terjejas.

Memeriksa Perilaku Dalaman Menggunakan id()

Dalam Python, anda boleh menggunakan fungsi id() untuk memeriksa ID objek. ID objek adalah serupa 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 dicipta untuk jenis tidak boleh ubah, manakala jenis boleh ubah diubah di tempat.

Fungsi dan Amaran dengan Objek yang Boleh Diubah dan Tidak Boleh Diubah

Apabila luluskan objek yang boleh diubah kepada fungsi, data asal mungkin diubah.

Contoh: Fungsi yang Mengubah Senarai

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 Mengubah Nombor

Sebaliknya, cuba untuk mengubah objek yang tidak boleh diubah mengakibatkan pembuatan objek baru.

1def modify_number(n):
2    n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number)  # 5 -> unchanged

Pertimbangan Praktikal

Elakkan Menggunakan Objek yang Boleh Diubah sebagai Argumen Lalai

 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

Oleh kerana argumen lalai hanya dinilai sekali sahaja semasa definisi fungsi, menggunakan objek yang boleh diubah boleh menyebabkan kesan sampingan yang tidak dijangka.

Ringkasan

Untuk memahami secara mendalam pembolehubah dan jenis data Python, adalah penting untuk memahami perbezaan antara yang boleh diubah dan tidak boleh diubah. Memahami ciri-ciri ini membantu anda mengelakkan tingkah laku yang tidak disengajakan dalam kod anda dan menulis program yang lebih teguh dan mudah dibaca.

Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.

YouTube Video