Rumah > pembangunan bahagian belakang > Tutorial Python > Apakah Perbezaan Halus Antara `i = x` dan `i = i x` dalam Python?

Apakah Perbezaan Halus Antara `i = x` dan `i = i x` dalam Python?

Patricia Arquette
Lepaskan: 2024-12-04 17:13:10
asal
822 orang telah melayarinya

What's the Subtle Difference Between `i  = x` and `i = i   x` in Python?

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
Salin selepas log masuk

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]
Salin selepas log masuk

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]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan