Apakah perbezaan antara `list.__iadd__` dan `list.__add__` dan mengapa ia membawa kepada hasil yang berbeza apabila mengubah suai senarai dalam Python?

Linda Hamilton
Lepaskan: 2024-10-30 08:55:02
asal
658 orang telah melayarinya

What is the difference between `list.__iadd__` and `list.__add__` and why does it lead to different results when modifying lists in Python?

Memahami Perbezaan Antara senarai.__iadd__ dan list.__add__

Dalam Python, objek boleh mentakrifkan kaedah "ajaib" khas untuk menyokong interaksi mereka dengan pengendali tertentu. Dua kaedah sedemikian ialah iadd dan __add__, masing-masing digunakan untuk operasi tambah di tempat dan biasa.

Pertimbangkan dua coretan kod berikut:

<code class="python"># Example 1
x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]

# Example 2
x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]</code>
Salin selepas log masuk

Mengapa perlu kedua-dua contoh ini berkelakuan berbeza?

Dalam kedua-dua kes, kita mulakan dengan dua senarai yang sama, x dan y, dan kita melakukan operasi tambah menggunakan sama ada x = [4] atau x = x [4].

Apabila menggunakan x = [4], kaedah __iadd__ Python dipanggil, yang melakukan penambahan di tempat. Ini bermakna senarai asal x bermutasi dan kandungannya dikemas kini dengan elemen dalam senarai [4]. Akibatnya, kedua-dua x dan y kini mengandungi senarai diubah suai yang sama.

Sebaliknya, apabila menggunakan x = x [4], kaedah __add__ Python dipanggil, yang mengembalikan senarai baharu yang mengandungi elemen daripada kedua-dua x dan [4]. Senarai asal x kekal tidak berubah dan y masih menunjuk ke senarai awal yang tidak diubah suai.

Atas ialah kandungan terperinci Apakah perbezaan antara `list.__iadd__` dan `list.__add__` dan mengapa ia membawa kepada hasil yang berbeza apabila mengubah suai senarai 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