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
838 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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!