Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Mengubah Suai Elemen Senarai Bersarang dalam Python Mempengaruhi Semua Salinannya?

Mengapa Mengubah Suai Elemen Senarai Bersarang dalam Python Mempengaruhi Semua Salinannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 01:44:29455semak imbas

Why Does Modifying a Nested List Element in Python Affect All Its Copies?

Indeks Senarai Bersarang: Mentafsir Gelagat Berasaskan Rujukan Python

Dalam Python, senarai dianggap sebagai struktur data berasaskan rujukan yang boleh berubah. Ciri ini menimbulkan kemungkinan perangkap semasa bekerja dengan senarai bersarang, seperti yang ditunjukkan oleh coretan kod berikut:

<code class="python">some_list = 4 * [(4 * [0])]</code>

Mencipta senarai bersarang seperti ini menghasilkan empat rujukan kepada senarai asas yang sama. Akibatnya, apa-apa pengubahsuaian yang dibuat pada salah satu rujukan memberi kesan kepada semua rujukan yang lain disebabkan sifat perkongsian mereka. Tingkah laku ini jelas dalam kod yang disediakan, di mana output yang dijangkakan:

<code class="python">[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]</code>

Bercanggah dengan output sebenar:

<code class="python">[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]</code>

Untuk mengelakkan gotcha ini, disyorkan untuk membuat senarai baharu contoh untuk setiap subsenarai menggunakan pendekatan pemahaman:

<code class="python">some_list = [(4 * [0]) for _ in range(4)]</code>

Pendekatan ini memastikan setiap subsenarai adalah bebas, menyelesaikan isu dan menghasilkan output yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Mengubah Suai Elemen Senarai Bersarang dalam Python Mempengaruhi Semua Salinannya?. 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