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

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

Barbara Streisand
Barbara Streisandasal
2024-11-02 04:34:02261semak imbas

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

Indeks Senarai Bersarang

Apabila bekerja dengan senarai bersarang dalam Python, adalah penting untuk memahami konsep rujukan senarai dan cara ia mempengaruhi indeks senarai .

Senarai Rujukan

Tidak seperti kebanyakan bahasa pengaturcaraan yang melepasi pembolehubah mengikut nilai, Python menghantar senarai melalui rujukan. Ini bermakna memberikan senarai kepada pembolehubah lain mencipta rujukan kepada objek senarai asas yang sama dalam ingatan.

Indeks Senarai Bersarang

Dalam kod yang disediakan, masalah timbul daripada penggunaan pendaraban senarai. Baris some_list = 4 * [(4 * [0])] mencipta empat rujukan kepada objek senarai yang sama, bermakna perubahan kepada salah satu daripada subsenarai akan menjejaskan keempat-empatnya.

Hasil Jangkaan

Keputusan yang dijangkakan ialah:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

Keputusan Sebenar

Keputusan sebenar ialah:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]

Penyelesaian

Untuk mengelakkan isu ini, gunakan gelung untuk membuat senarai bersarang tanpa membuat berbilang rujukan kepada senarai yang sama. Kod yang diperbetulkan ialah:

some_list = [(4 * [0]) for _ in range(4)]

Gelung ini mencipta empat senarai bebas, setiap satu dengan empat sifar, memastikan gelagat yang diharapkan tercapai.

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