Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Senarai Bersarang dalam Python Berkongsi Data Dasar yang Sama?

Mengapa Senarai Bersarang dalam Python Berkongsi Data Dasar yang Sama?

DDD
Lepaskan: 2024-10-31 07:46:02
asal
305 orang telah melayarinya

Why Do Nested Lists in Python Share the Same Underlying Data?

Indeks Senarai Bersarang

Dalam Python, senarai bersarang boleh dibuat menggunakan senarai senarai. Walau bagaimanapun, apabila mengubah suai nilai dalam senarai ini, perangkap biasa timbul disebabkan pengendalian rujukan Python.

Pertimbangkan kod berikut:

<code class="python">some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i + 1][j + 1] = 1
for i in range(4):
    print(some_list[i])</code>
Salin selepas log masuk

Output yang dimaksudkan ialah:

[0, 0, 0, 0]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
Salin selepas log masuk

Walau bagaimanapun, output sebenar ialah:

[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
[0, 1, 1, 1]
Salin selepas log masuk

Memahami Isu

Isu ini berpunca daripada baris some_list = 4 * [(4 * [0 ])]. Di sini, ungkapan [(4 * [0])] mencipta senarai tunggal dengan empat elemen, setiap satu senarai dengan empat sifar. Walau bagaimanapun, pendaraban 4 * seterusnya mencipta empat rujukan kepada senarai yang sama, bukannya empat senarai yang berbeza.

Akibatnya, apabila nilai diubah suai dalam satu elemen some_list, ia turut mempengaruhi elemen lain kerana ia semua menunjuk ke senarai asas yang sama. Tingkah laku ini dikenali sebagai hantaran rujukan dalam Python.

Penyelesaian

Untuk menyelesaikan isu ini dan mencipta senarai bebas dalam some_list, gelung boleh digunakan untuk mencipta setiap subsenarai secara individu , seperti berikut:

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

Kod ini mencipta empat senarai berbeza, setiap satu dengan empat sifar. Mengubah suai nilai dalam satu subsenarai tidak lagi akan menjejaskan subsenarai yang lain.

Atas ialah kandungan terperinci Mengapa Senarai Bersarang dalam Python Berkongsi Data Dasar yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan