Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Pengubahsuaian Pembolehubah Senarai dalam Python Juga Mempengaruhi Pembolehubah Lain yang Ditugaskan kepadanya?

Mengapa Pengubahsuaian Pembolehubah Senarai dalam Python Juga Mempengaruhi Pembolehubah Lain yang Ditugaskan kepadanya?

Patricia Arquette
Patricia Arquetteasal
2024-11-02 18:55:30811semak imbas

Why Does Modifying a List Variable in Python Also Affect Another Variable Assigned to It?

Mutasi Senarai Tidak Dijangka: Memahami Kesan Rujukan

Dalam Python, pembolehubah senarai mewakili rujukan kepada tatasusunan yang disimpan dalam ingatan. Apabila menetapkan satu pembolehubah senarai kepada yang lain (cth., vec = v), apa yang sebenarnya berlaku ialah alamat tatasusunan dihantar dan bukannya menyalin tatasusunan itu sendiri.

Ini bermakna sebarang pengubahsuaian yang dibuat pada satu senarai akan juga menjejaskan senarai lain yang menunjuk ke alamat memori yang sama. Sebagai contoh, pertimbangkan kod berikut:

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

Selepas melaksanakan kod di atas, kedua-dua v dan vec akan mengandungi nilai berikut:

[0, 0, 0, 0, 0, 5, 0, 0, 0]

Ini berlaku kerana vec dan v kedua-duanya merujuk tatasusunan yang sama dalam ingatan. Apabila nilai pada indeks 5 dalam vec diubah suai kepada 5, perubahan itu bukan sahaja dicerminkan dalam vec, tetapi juga dalam v, kerana kedua-dua pembolehubah menghala ke tatasusunan asas yang sama.

Untuk mencipta salinan sebenar senarai , gunakan kaedah copy() atau pembina list() dengan senarai asal sebagai hujah, seperti yang ditunjukkan di bawah:

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

Atas ialah kandungan terperinci Mengapa Pengubahsuaian Pembolehubah Senarai dalam Python Juga Mempengaruhi Pembolehubah Lain yang Ditugaskan kepadanya?. 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