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