Mengapa memanggil metode string Python tidak melakukan apa pun kecuali Anda menetapkan keluarannya?


137

Saya mencoba melakukan penggantian string sederhana, tetapi saya tidak tahu mengapa sepertinya tidak berhasil:

X = "hello world"
X.replace("hello", "goodbye")

Saya ingin mengubah kata hellomenjadi goodbye, sehingga harus mengubah string "hello world"menjadi "goodbye world". Tapi X tetap ada "hello world". Mengapa kode saya tidak berfungsi?

Jawaban:


234

Ini karena string tidak dapat diubah dalam Python .

Yang berarti X.replace("hello","goodbye")mengembalikan salinan Xdengan penggantian yang dibuat . Karena itu Anda perlu mengganti baris ini:

X.replace("hello", "goodbye")

dengan baris ini:

X = X.replace("hello", "goodbye")

Lebih luas lagi, ini berlaku untuk semua metode tali Python yang mengubah isi suatu string "di tempat" , misalnya replace, strip, translate, lower/ upper, join, ...

Anda harus menetapkan keluarannya ke sesuatu jika Anda ingin menggunakannya dan tidak membuangnya, mis

X  = X.strip(' \t')
X2 = X.translate(...)
Y  = X.lower()
Z  = X.upper()
A  = X.join(':')
B  = X.capitalize()
C  = X.casefold()

dan seterusnya.


1
Titik pedantic: string dapat dimutasi untuk x += 'a'kasus khusus, misalnya stackoverflow.com/a/40996908/6260170
Chris_Rands

@Chris_Rands: Sepertinya Anda benar, tetapi dari luar itu tidak memiliki efek mutabilitas yang nyata - beberapa implementasi memeriksa apakah ini benar-benar digunakan, dan jika tidak (jadi mutabilitas tidak akan diamati), itu sebenarnya akan bermutasi. Benarkah itu?
Tadeck

@Tadeck Yah saya pikir ini nyata tetapi itu hanya optimasi CPython dan tidak secara langsung relevan di sini (itulah mengapa saya mengatakan saya bertele-tele)
Chris_Rands

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.