Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Kebijaksanaan standar adalah bahwa string Python tidak dapat diubah. Anda tidak dapat mengubah nilai string, hanya referensi ke string. Seperti itu

x = "hello"
x = "goodbye"  # New string!

Yang menyiratkan bahwa setiap kali Anda membuat perubahan pada variabel string, Anda sebenarnya menghasilkan string baru. Karena itu, tutorial di luar sana memperingatkan Anda untuk menghindari rangkaian string di dalam loop dan menyarankan untuk menggunakan join sebagai gantinya untuk alasan kinerja. Bahkan dokumentasi resmi mengatakan demikian

Ini salah. Semacam

Ada kasus umum ketika string dalam Python sebenarnya bisa berubah. Saya akan menunjukkan kepada Anda sebuah contoh dengan memeriksa ID unik objek string menggunakan fungsi id() bawaan, yang hanya merupakan alamat memori. Jumlahnya berbeda untuk setiap objek. (Objek dapat dibagikan, seperti dengan magang. )

Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Saya menggabungkan dua string tetapi alamat memori tidak berubah

Untuk pemeriksaan kewarasan tambahan, mari buat "penunjuk" kita sendiri dan lihat apakah itu menunjuk ke string asli atau yang dimodifikasi

Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Jika string benar-benar tidak dapat diubah, maka alamat yang kami simpan di b akan mengarah ke string asli. Namun, kami melihat bahwa string yang dicetak setara

Kita dapat mencoba pengujian lain untuk melihat seberapa sering kita mendapatkan objek string baru dengan melakukan 10.000 penggabungan kecil

Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Hanya 46 dari 10.000 rangkaian yang mengalokasikan string baru

Jadi apa yang terjadi di sini?

CPython pintar. Jika tidak ada referensi lain ke string, maka string akan mencoba untuk memutasikan string alih-alih mengalokasikan yang baru. Meskipun terkadang perlu mengubah ukuran buffer jika string menjadi terlalu besar, seperti vektor C++ atau Daftar C#

Kita bisa melihat petunjuk pertama dalam kode untuk ini di file CPython. Ia mencoba mengurangi jumlah referensi menjadi 1 jika memungkinkan saat melakukan penggabungan string

Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Sekarang lihat PyUnicode_Append() di. Jika string dapat dimodifikasi (hanya memiliki 1 referensi dan tidak diinternir), maka string akan mencoba menambahkan di tempatnya. unicode_resize() akan melihat apakah itu cocok atau jika alokasi baru perlu dibuat

Jelaskan mengapa string tidak dapat diubah dengan contoh dalam python

Itu dia. Bukti bahwa Anda dapat mengubah string dengan Python


Apakah ini benar-benar dianggap sebagai mutabilitas? . String akan tetap dibuang jadi ini hanya pengoptimalan untuk menggunakan kembali memori. Hal penting yang dapat diambil di sini adalah Anda tidak mengalokasikan string baru setiap saat seperti yang dikatakan internet

Bisa berubah adalah cara mewah untuk mengatakan bahwa keadaan internal objek diubah/bermutasi. Jadi, definisi paling sederhana adalah. Objek yang keadaan internalnya dapat diubah dapat diubah. Di sisi lain, immutable tidak mengizinkan perubahan apa pun pada objek setelah dibuat

Kedua status ini merupakan bagian integral dari struktur data Python. Jika Anda ingin menjadi lebih berpengetahuan tentang seluruh Struktur Data Python, ikuti kursus gratis ini yang mencakup banyak struktur data dalam Python termasuk struktur data tuple yang tidak dapat diubah. Anda juga akan menerima sertifikat pada penyelesaian yang pasti akan menambah nilai portofolio Anda

Definisi yang Dapat Diubah

Bisa berubah adalah ketika sesuatu dapat diubah atau memiliki kemampuan untuk berubah. Dalam Python, 'bisa berubah' adalah kemampuan objek untuk mengubah nilainya. Ini sering merupakan objek yang menyimpan kumpulan data

Definisi yang tidak berubah

Abadi adalah ketika tidak ada perubahan yang mungkin dari waktu ke waktu. Dalam Python, jika nilai suatu objek tidak dapat diubah dari waktu ke waktu, maka itu dikenal sebagai tidak dapat diubah. Setelah dibuat, nilai objek ini bersifat permanen

Daftar objek yang Dapat Diubah dan Tidak Dapat Diubah

Objek tipe bawaan yang bisa berubah adalah

  • Daftar
  • Set
  • Kamus
  • Kelas yang Ditentukan Pengguna (Ini murni tergantung pada pengguna untuk menentukan karakteristik)

Objek tipe bawaan yang tidak dapat diubah adalah

  • Bilangan (Integer, Rasional, Float, Desimal, Kompleks & Boolean)
  • String
  • Tupel
  • Set Beku
  • Kelas yang Ditentukan Pengguna (Ini murni tergantung pada pengguna untuk menentukan karakteristik)

Mutabilitas objek adalah salah satu karakteristik yang membuat Python menjadi bahasa yang diketik secara dinamis. Meskipun Mutable dan Immutable dalam Python adalah konsep yang sangat mendasar, kadang-kadang bisa sedikit membingungkan karena sifat intransitif dari kekekalan.

Objek dengan Python

Dalam Python, semuanya diperlakukan sebagai objek. Setiap objek memiliki tiga atribut ini

  • Identitas – Ini mengacu pada alamat yang dirujuk objek dalam memori komputer
  • Type – Ini mengacu pada jenis objek yang dibuat. Misalnya- bilangan bulat, daftar, string dll.  
  • Nilai – Ini mengacu pada nilai yang disimpan oleh objek. Misalnya – List=[1,2,3] akan menampung angka 1,2 dan 3

Meskipun ID dan Jenis tidak dapat diubah setelah dibuat, nilai dapat diubah untuk objek yang Dapat Diubah

Lihat kursus sertifikat python gratis ini untuk memulai dengan Python

Objek yang Dapat Diubah dengan Python

Saya percaya, daripada mendalami aspek teori bisa berubah dan tidak berubah dalam Python, kode sederhana akan menjadi cara terbaik untuk menggambarkan apa artinya dalam Python. Oleh karena itu, mari kita bahas kode di bawah ini langkah demi langkah

#Membuat daftar yang berisi nama kota di India

cities = [‘Delhi’, ‘Mumbai’, ‘Kolkata’]
_

# Mencetak elemen dari daftar kota, dipisahkan dengan koma dan spasi

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8

#Menambahkan kota baru ke daftar kota

cities.append(‘Chennai’)
_

#Mencetak elemen dari daftar kota, dipisahkan dengan koma dan spasi

for city in cities:
	print(city, end=’, ’)

Output [3]: Delhi, Mumbai, Kolkata, Chennai

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

print(hex(id(cities)))

Output [4]: 0x1691d7de8c8
_

Contoh di atas menunjukkan kepada kita bahwa kita dapat mengubah keadaan internal 'kota' objek dengan menambahkan satu kota lagi 'Chennai' ke dalamnya, namun alamat memori objek tidak berubah. Ini menegaskan bahwa kami tidak membuat objek baru, melainkan objek yang sama telah diubah atau dimutasi. Karenanya, kita dapat mengatakan bahwa objek yang merupakan jenis daftar dengan nama variabel referensi 'kota' adalah OBJEK YANG DAPAT DIUBAH

Sekarang mari kita bahas istilah IMMUTABLE. Mempertimbangkan bahwa kami memahami apa kepanjangan dari yang dapat diubah, jelas bahwa definisi dari yang tidak dapat diubah akan menyertakan 'TIDAK' di dalamnya. Berikut adalah definisi paling sederhana dari kekekalan– Sebuah objek yang keadaan internalnya TIDAK dapat diubah adalah KEKENALAN

Sekali lagi, jika Anda mencoba dan berkonsentrasi pada pesan kesalahan yang berbeda, Anda temui, dilemparkan oleh masing-masing IDE; . Misalnya, pertimbangkan kode di bawah ini & pesan kesalahan yang terkait dengannya, saat mencoba mengubah nilai Tuple pada indeks 0.  

#Membuat Tuple dengan nama variabel 'foo'

foo = (1, 2)

#Mengubah nilai indeks[0] dari 1 menjadi 3

foo[0] = 3
	
TypeError: 'tuple' object does not support item assignment 
_

Objek Abadi dengan Python

Sekali lagi, kode sederhana akan menjadi cara terbaik untuk menggambarkan arti dari kekekalan. Oleh karena itu, mari kita bahas kode di bawah ini langkah demi langkah

#Membuat Tuple yang berisi nama hari kerja bahasa Inggris

weekdays = ‘Sunday’, ‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’
_

# Mencetak elemen tuple hari kerja

print(weekdays)

Output [1]:  (‘Sunday’, ‘Monday’, ‘Tuesday’, ‘Wednesday’, ‘Thursday’, ‘Friday’, ‘Saturday’)

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
0

#tuple tidak dapat diubah, jadi Anda tidak dapat menambahkan elemen baru, oleh karena itu, gunakan penggabungan tupel dengan operator # + untuk menambahkan hari imajiner baru di tuple 'hari kerja'

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
1

#Mencetak elemen tuple hari kerja

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
2

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
_3

Contoh di atas menunjukkan bahwa kami dapat menggunakan nama variabel yang sama yang mereferensikan objek yang merupakan jenis tupel dengan tujuh elemen di dalamnya. Namun, ID atau lokasi memori tuple lama & baru tidak sama. Kami tidak dapat mengubah status internal objek 'hari kerja'. Manajer program Python membuat objek baru di alamat memori dan nama variabel 'hari kerja' mulai mereferensikan objek baru dengan delapan elemen di dalamnya. Oleh karena itu, kita dapat mengatakan bahwa objek yang merupakan jenis tuple dengan nama variabel referensi 'hari kerja' adalah OBJEK TETAP

Baca juga. Memahami Exploratory Data Analysis (EDA) dengan Python

Di mana Anda bisa menggunakan objek yang bisa berubah dan tidak berubah

Objek yang dapat diubah dapat digunakan di mana Anda ingin mengizinkan pembaruan apa pun. Misalnya, Anda memiliki daftar nama karyawan di organisasi Anda, dan perlu diperbarui setiap kali ada anggota baru yang direkrut. Anda dapat membuat daftar yang dapat berubah, dan dapat diperbarui dengan mudah

Kekekalan menawarkan banyak aplikasi berguna untuk berbagai tugas sensitif yang kami lakukan di lingkungan yang berpusat pada jaringan tempat kami mengizinkan pemrosesan paralel. Dengan membuat objek yang tidak dapat diubah, Anda menyegel nilai dan memastikan bahwa tidak ada utas yang dapat meminta penimpaan/pembaruan ke data Anda. Ini juga berguna dalam situasi di mana Anda ingin menulis kode yang tidak dapat dimodifikasi. Misalnya, kode debug yang mencoba menemukan nilai objek yang tidak dapat diubah

Hati-hati. Sifat Kekekalan yang tidak transitif

OKE. Sekarang kita mengerti apa itu objek yang bisa berubah & tidak berubah di Python. Mari kita lanjutkan dan diskusikan kombinasi keduanya dan jelajahi kemungkinannya. Mari kita bahas, bagaimana perilakunya jika Anda memiliki objek yang tidak dapat diubah yang berisi objek yang dapat diubah?

#membuat Tuple (objek tidak berubah) yang berisi 2 daftar (dapat diubah) sebagai elemennya

#Elemen (daftar) berisi nama, umur & jenis kelamin

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
_4

#mencetak tuple

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
5

#mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
6

#Mengubah usia untuk elemen ke-1. Memilih elemen pertama tuple dengan menggunakan pengindeksan [0] lalu elemen ke-2 dari daftar dengan menggunakan pengindeksan [1] dan menetapkan nilai baru untuk usia sebagai 4

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
7

#mencetak tuple yang diperbarui

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
_8

#mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

for city in cities:
		print(city, end=’, ’)

Output [1]: Delhi, Mumbai, Kolkata
_9

Pada kode di atas, Anda dapat melihat bahwa objek 'orang' tidak dapat diubah karena merupakan jenis tupel. Namun, ia memiliki dua daftar sebagai elemennya, dan kami dapat mengubah status daftar (daftar dapat diubah). Jadi, di sini kita tidak mengubah referensi objek di dalam Tuple, tetapi objek yang direferensikan dimutasi

Baca juga. Deteksi Objek Real-Time Menggunakan TensorFlow

Dengan cara yang sama, mari jelajahi bagaimana perilakunya jika Anda memiliki objek yang dapat diubah yang berisi objek yang tidak dapat diubah?

#membuat daftar (objek yang dapat diubah) yang berisi tupel (tidak dapat diubah) sebagai elemennya

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
0

#mencetak daftar

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
1

#mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
2

#mengubah referensi objek pada indeks 0

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
_3

#mencetak daftar

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
_4

#mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
5

Sebagai seorang individu, itu sepenuhnya tergantung pada Anda dan kebutuhan Anda untuk struktur data seperti apa yang ingin Anda buat dengan kombinasi objek yang dapat diubah & tidak dapat diubah. Saya harap informasi ini akan membantu Anda saat memutuskan jenis objek yang ingin Anda pilih untuk selanjutnya

Sebelum saya mengakhiri pembahasan kita tentang IMMUTABILITY, izinkan saya untuk menggunakan kata 'CAVITE' ketika kita membahas String dan Integer. Ada pengecualian, dan Anda mungkin melihat beberapa hasil yang mengejutkan saat memeriksa kebenaran untuk kekekalan. Contohnya
#membuat objek bertipe integer dengan nilai 10 dan nama variabel referensi 'x'

x = 10

#mencetak nilai 'x'

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
6

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
_7

#membuat objek bertipe integer dengan nilai 10 dan nama variabel referensi 'y'

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
8

#mencetak nilai 'y'

print(hex(id(cities)))

Output [2]: 0x1691d7de8c8
_9

#Mencetak lokasi objek yang dibuat di alamat memori dalam format heksadesimal

cities.append(‘Chennai’)
_0

Sesuai dengan pembahasan dan pemahaman kita, sejauh ini, alamat memori untuk x & y seharusnya berbeda, karena 10 adalah instance dari kelas Integer yang tidak dapat diubah. Namun, seperti yang ditunjukkan pada kode di atas, ia memiliki alamat memori yang sama. Ini bukan sesuatu yang kami harapkan. Tampaknya apa yang telah kita pahami dan diskusikan, memiliki pengecualian juga

Pemeriksaan cepat – Struktur Data Python

Kekekalan Tuple

Tuple tidak dapat diubah dan karenanya tidak dapat memiliki perubahan apa pun di dalamnya setelah dibuat dengan Python. Ini karena mereka mendukung operasi urutan yang sama dengan string. Kita semua tahu bahwa string tidak dapat diubah. Operator indeks akan memilih elemen dari tuple seperti pada string. Oleh karena itu, mereka tidak berubah

Pengecualian dalam kekekalan

Seperti semua, ada juga pengecualian dalam kekekalan di python. Tidak semua objek yang tidak dapat diubah benar-benar dapat berubah. Ini akan menimbulkan banyak keraguan di benak Anda. Mari kita ambil contoh untuk memahami hal ini

Pertimbangkan tuple 'tup'

Sekarang, jika kita mempertimbangkan tuple tup = ('GreatLearning',[4,3,1,2]) ;

Kami melihat bahwa tuple memiliki elemen tipe data yang berbeda. Elemen pertama di sini adalah string yang seperti yang kita semua tahu sifatnya tidak dapat diubah. Elemen kedua adalah daftar yang kita semua tahu bisa berubah. Sekarang, kita semua tahu bahwa tuple itu sendiri adalah tipe data yang tidak dapat diubah. Itu tidak dapat mengubah isinya. Tapi, daftar di dalamnya bisa berubah isinya. Jadi, nilai objek yang tidak dapat diubah tidak dapat diubah tetapi objek penyusunnya bisa. mengubah nilainya

FAQ

1. Perbedaan antara bisa berubah vs tidak berubah dengan Python?

ObjectImmutable ObjectState dari objek dapat dimodifikasi setelah dibuat. Status objek tidak dapat diubah setelah dibuat. Mereka tidak aman. Mereka adalah kelas thread safeMutable yang belum final. Penting untuk membuat kelas final sebelum membuat objek yang tidak dapat diubah

2. Apa tipe data yang bisa berubah dan tidak berubah di Python?

  • Beberapa tipe data yang bisa berubah di Python adalah

daftar, kamus, set, kelas yang ditentukan pengguna

  • Beberapa tipe data yang tidak dapat diubah adalah.  

int, float, desimal, bool, string, tuple, range

3. Apakah daftar bisa berubah dengan Python?

Daftar dalam Python adalah tipe data yang dapat berubah karena elemen daftar dapat dimodifikasi, elemen individual dapat diganti, dan urutan elemen dapat diubah bahkan setelah daftar dibuat
(Contoh terkait daftar telah dibahas sebelumnya di blog ini. )

4. Mengapa tuple disebut tipe yang tidak dapat diubah?

Struktur data tupel dan daftar sangat mirip, tetapi satu perbedaan besar antara tipe data adalah bahwa daftar dapat berubah, sedangkan tupel tidak dapat diubah. Alasan ketidakberubahan tuple adalah setelah elemen ditambahkan ke tuple dan tuple telah dibuat;

Seorang programmer akan selalu lebih suka membuat kode yang dapat digunakan kembali daripada membuat seluruh objek data lagi. Tetap saja, meskipun tupel tidak dapat diubah, seperti daftar, tuple dapat berisi objek Python apa pun, termasuk objek yang dapat diubah

5. Apakah set bisa berubah dengan Python?

Himpunan adalah kumpulan tipe data yang tidak terurut yang dapat digunakan untuk melakukan operasi matematika (seperti penyatuan, persimpangan, perbedaan, dll. ). Setiap elemen dalam suatu himpunan adalah unik dan tidak dapat diubah, mis. e. tidak boleh ada nilai duplikat, dan nilai tidak dapat diubah. Namun, kami dapat menambah atau menghapus item dari set karena set itu sendiri dapat berubah

6. Apakah string bisa berubah dengan Python?

String tidak dapat diubah dengan Python. String adalah tipe data yang tidak dapat diubah yang artinya nilainya tidak dapat diperbarui

Mengapa string tidak dapat diubah dalam Python dengan contoh?

Dengan Python, string dibuat tidak dapat diubah sehingga pemrogram tidak dapat mengubah isi objek (bahkan karena kesalahan). Ini menghindari bug yang tidak perlu. Beberapa objek abadi lainnya adalah integer, float, tuple, dan bool. Lebih lanjut tentang objek yang dapat diubah dan tidak dapat diubah dengan Python.

Apa artinya string tidak dapat diubah dengan Python?

String tidak dapat diubah dengan Python. String adalah tipe data yang tidak dapat diubah yang artinya nilainya tidak dapat diperbarui .

Mengapa string tidak dapat diubah?

String tidak dapat diubah di Java karena keamanan, sinkronisasi dan konkurensi, caching, dan pemuatan kelas . Alasan membuat string final adalah untuk menghancurkan kekekalan dan tidak membiarkan orang lain memperpanjangnya. Objek String di-cache di kumpulan String, dan itu membuat String tidak dapat diubah.

Jenis Python mana yang tidak dapat diubah jelaskan dengan contoh?

Daftar, Set, dan Kamus di Python adalah contoh beberapa tipe data yang bisa diubah di Python. Tipe data yang tidak dapat diubah adalah yang nilainya tidak dapat diubah setelah dibuat. Contoh tipe data yang tidak dapat diubah adalah int, str, bool, float, tuple , dll.