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?

Katherina
sumber

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.

Tadeck
sumber
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
0

Semua fungsi string sebagai lower, upper, stripakan kembali string tanpa memodifikasi aslinya. Jika Anda mencoba memodifikasi string, seperti yang Anda duga, string well it is an iterableakan gagal.

x = 'hello'
x[0] = 'i' #'str' object does not support item assignment

Ada bacaan yang baik tentang pentingnya string yang tidak dapat diubah: Mengapa string Python tidak dapat diubah? Praktik terbaik untuk menggunakannya

pengguna1767754
sumber