Perbezaan Halus Antara "i = x" dan "i = i x" dalam Python
Dalam Python, pengendali tugasan "=" melakukan apa yang anda harapkan: ia memberikan nilai kepada pembolehubah. Walau bagaimanapun, pengendali tugasan tambahan " =" mempunyai tingkah laku yang sedikit berbeza, bergantung pada jenis objek yang diubah suai.
Kunci untuk memahami perbezaannya terletak pada kaedah ajaib "__iadd__" dan "__tambah__". "__iadd__" dipanggil apabila operator penugasan ditambah digunakan, manakala "__add__" dipanggil apabila operator " " biasa digunakan.
Mutable vs. Immutable Objects
Perbezaan utama antara " =" dan " " menjadi jelas apabila berurusan dengan objek boleh ubah dan tidak boleh ubah. Objek tidak boleh ubah tidak boleh ditukar, jadi kaedah sihir mereka biasanya akan mengembalikan kejadian baharu. Sebaliknya, objek boleh ubah boleh diubah suai dan kaedah ajaibnya biasanya akan mengubah suai objek itu sendiri.
Kes Objek Tidak Boleh Ubah (cth., Nombor Bulat)
Untuk objek tidak berubah seperti integer, kedua-dua " =" dan " " mempunyai kesan yang sama. Mereka akan mencipta integer baharu dan menetapkannya kepada pembolehubah. Contohnya:
i = 1 i += 1 # Same as i = i + 1
Kes Objek Boleh Berubah (cth., Senarai)
Untuk objek boleh ubah seperti senarai, gelagat " =" berbeza daripada " ". Pertimbangkan contoh berikut:
a = [1, 2, 3] b = a b += [1, 2, 3] print(a) # [1, 2, 3, 1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
Dalam kes ini, menggunakan " =" mengubah suai senarai "b" di tempatnya. Kedua-dua "a" dan "b" kini menghala ke senarai diubah suai yang sama.
Bedakan ini dengan:
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
Di sini, menggunakan " " mencipta senarai baharu , yang ditugaskan kepada "b". "a" tidak terjejas kerana ia masih menunjuk kepada senarai asal.
Kesimpulan
Ringkasnya, pilihan antara " =" dan " " bergantung pada jenis objek yang diberikan. Untuk objek tidak berubah, kedua-dua pengendali adalah setara. Untuk objek boleh ubah, " =" mengubah suai objek di tempatnya, manakala " " mencipta salinan.
Atas ialah kandungan terperinci Apakah Perbezaan Halus Antara `i = x` dan `i = i x` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!