Rumah > Artikel > pembangunan bahagian belakang > Mengapa Menugaskan Senarai Baharu kepada Argumen Fungsi Tidak Mengubah Suai Senarai Asal dalam Python?
Dalam Python, apabila fungsi menerima senarai sebagai hujah, parameter berkesan menjadi rujukan yang menunjuk ke lokasi senarai asal dalam ingatan. Sebarang pengubahsuaian yang dibuat pada senarai dalam fungsi ditunjukkan secara langsung dalam senarai panggilan.
Walau bagaimanapun, kod berikut menunjukkan tingkah laku pelik yang mencabar pemahaman ini:
<code class="python">def function1(list_arg): a = function2() # function2 returns an array of numbers list_arg = list(a) list1 = [0] * 5 function1(list1) print(list1) # [0, 0, 0, 0, 0]</code>
Dalam contoh ini, kami berhasrat untuk function1 mengubah suai list1 dengan menggantikan elemennya dengan elemen dari array a. Tetapi keputusan menunjukkan senarai1 kekal tidak berubah. Mengapa ini berlaku?
Isu timbul daripada andaian yang salah bahawa memberikan nilai baharu kepada pembolehubah list_arg dalam function1 mengubah suai senarai asal. Pada hakikatnya, tugasan ini hanya menukar rujukan list_arg untuk menunjuk ke objek lain dalam ingatan. Senarai asal yang dirujuk oleh kod panggilan kekal tidak disentuh.
Untuk berjaya mengubah senarai asal dalam function1, kita perlu mengubah suai elemen individunya. Ini boleh dicapai melalui penetapan keping:
<code class="python">list_arg[:] = list(a)</code>
Penugasan kepingan menggantikan keseluruhan julat elemen dalam list_arg dengan nilai daripada list(a). Secara berkesan, tindakan ini secara langsung mengubah suai senarai asal.
Walaupun tugasan slice menyediakan penyelesaian yang mudah, adalah penting untuk mengambil perhatian potensinya untuk kekeliruan. Dengan mengubah suai senarai di tempat, kod menjadi kurang telus dan lebih mudah terdedah kepada salah faham oleh pembangun lain yang mengekalkannya. Pertimbangkan pendekatan alternatif, seperti mengembalikan senarai baharu yang diubah suai daripada fungsi, untuk meningkatkan kejelasan dan kebolehbacaan kod.
Atas ialah kandungan terperinci Mengapa Menugaskan Senarai Baharu kepada Argumen Fungsi Tidak Mengubah Suai Senarai Asal dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!