Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa memberikan senarai kepada pembolehubah baharu dalam Python tidak membuat salinan berasingan?

Mengapa memberikan senarai kepada pembolehubah baharu dalam Python tidak membuat salinan berasingan?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 07:43:30587semak imbas

Why does assigning a list to a new variable in Python not create a separate copy?

Mutasi Senarai Tidak Dijangka

Apabila mencipta senarai seperti v = [0,0,0,0,0,0,0,0 ,0], anda mungkin menganggap bahawa memberikan senarai baharu kepada pembolehubah mencipta rujukan berasingan. Walau bagaimanapun, kod seperti berikut boleh menunjukkan tingkah laku yang tidak dijangka:

<code class="python">vec = v
vec[5] = 5</code>

Kedua-dua vec dan v kini mengandungi nilai 5 pada indeks 5. Mengapa ini berlaku?

Tugasan Rujukan

Dalam Python, senarai ialah objek boleh ubah. Menetapkan vec = v tidak mencipta salinan baharu senarai. Sebaliknya, ia memberikan rujukan kepada v. Kedua-dua vec dan v menghala ke objek senarai asas yang sama dalam ingatan.

Sebarang pengubahsuaian yang dibuat sama ada pada vec atau v akan menjejaskan senarai asal kerana ia adalah senarai yang sama. Inilah sebabnya apabila vec[5] ditukar, v juga berubah.

Penyelesaian

Untuk mencipta salinan senarai yang berasingan, gunakan fungsi list():

<code class="python">vec = list(v)</code>

Ini mencipta objek senarai baharu yang mengandungi salinan elemen daripada v. Sebarang perubahan yang dibuat kepada vec tidak akan menjejaskan v, dan sebaliknya.

Atas ialah kandungan terperinci Mengapa memberikan senarai kepada pembolehubah baharu dalam Python tidak membuat salinan berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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