Rumah >pembangunan bahagian belakang >Tutorial Python >Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?

Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-12-08 00:50:16833semak imbas

When Do `i  = x` and `i = i   x` Produce Different Results in Python?

Apabila Tugasan dan Pembesaran Berbeza: Meneroka "i = x" lwn. "i = i x"

Penggunaan operator = dalam Python boleh membawa kepada tingkah laku yang tidak dijangka dalam senario tertentu. Mari kita periksa perbezaan antara i = x dan i = i x untuk memahami apabila ia menyimpang.

Memahami Lebihan Operator

Pengendali = memanggil iadd kaedah jika wujud, atau kaedah tambah jika iadd tidak tersedia. Sebaliknya, pengendali terutamanya memanggil kaedah add.

Mutable vs. Immutable Object

Gelagat = bergantung pada sama ada objek berada yang ditetapkan boleh berubah (boleh diubah) atau tidak berubah (tidak boleh diubah). Untuk objek tidak berubah, kedua-duanya = dan buat contoh baharu. Walau bagaimanapun, iadd mengubah suai objek asal dan memberikannya kembali kepada nama pembolehubah, menimpa rujukan sebelumnya.

Contoh: Senarai

Untuk menggambarkan perbezaannya, pertimbangkan kod 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]

Memandangkan senarai adalah boleh ubah, = mengubah suai b pada tempatnya, yang mempengaruhi a kerana kedua-dua pembolehubah merujuk senarai yang sama.

Sekarang, pertimbangkan:

a = [1, 2, 3]
b = a
b = b + [1, 2, 3]
print(a)  # [1, 2, 3]
print(b)  # [1, 2, 3, 1, 2, 3]

Dalam kes ini, b = b [1, 2, 3] mencipta senarai baharu, meninggalkan senarai yang tidak berubah. Ini kerana memanggil kaedah tambah, yang mengembalikan tika baharu.

Pengendalian Pengecualian untuk ' ='

Dalam kes di mana x. __add__ tidak dilaksanakan atau mengembalikan NotImplemented, dan x dan y mempunyai jenis yang berbeza, operator akan kembali pada y.__radd__ jika ia wujud. Oleh itu, perkara berikut adalah bersamaan:

foo_instance += bar_instance
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)

Peningkatan Subkelas

Apabila foo_instance dan bar_instance adalah daripada jenis yang berbeza, dan bar_instance ialah subkelas foo_instance, bar_instance.__radd__ akan dicuba sebelum foo_instance.__add__. Ini membolehkan subkelas mengatasi kelakuan kelas super mereka.

Kesimpulan

Memahami perbezaan antara i = x dan i = i x adalah penting untuk mengelakkan hasil yang tidak dijangka dalam pengaturcaraan Python . Dengan mengetahui masa dan cara pengendali ini berkelakuan berbeza, anda boleh memanipulasi kedua-dua objek tidak berubah dan boleh ubah dengan berkesan.

Atas ialah kandungan terperinci Bilakah Adakah `i = x` dan `i = i x` Menghasilkan Keputusan Berbeza dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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