Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah `x = [4]` Mengubah suai `x` tetapi `x = x [4]` Mencipta Senarai Baharu dalam Python?

Mengapakah `x = [4]` Mengubah suai `x` tetapi `x = x [4]` Mencipta Senarai Baharu dalam Python?

Susan Sarandon
Lepaskan: 2024-10-30 02:09:03
asal
958 orang telah melayarinya

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

Gelagat Berbeza: list.__iadd__ vs list.__add__

Pertimbangkan kod Python misterius berikut:

x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]
Salin selepas log masuk

Sekarang, sandingkan dengan coretan kod ini:

x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]
Salin selepas log masuk

Apa yang membingungkan kami ialah perbezaan ketara dalam tingkah laku mereka. Mengapakah x = [4] mengubah senarai asal x, manakala x = x [4] menghasilkan senarai baharu?

Jawapannya terletak pada kaedah objek Python. list.__iadd__ mengubah senarai sedia ada dengan menambahkan elemen senarai kedua padanya. Sebaliknya, list.__add__ mencipta senarai baharu yang terdiri daripada elemen kedua-dua senarai input.

Ungkapan seperti x = y percubaan pertama untuk memanggil __iadd__. Jika __iadd__ tersedia, ia akan melaksanakan sihir mutasi ini. Jika tidak, ia akan lalai kepada __add__, yang mencipta senarai baharu dan memberikannya kepada x. Memandangkan kelas senarai mentakrifkan __iadd__, coretan kod pertama memutasi senarai x asal, manakala coretan kod yang terakhir mencipta senarai baharu dan menetapkannya kepada x, meninggalkan y tidak diubah suai.

Atas ialah kandungan terperinci Mengapakah `x = [4]` Mengubah suai `x` tetapi `x = x [4]` Mencipta Senarai Baharu dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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