Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Perubahan kepada Satu Subsenarai Mempengaruhi Semua Subsenarai dalam Senarai Python Senarai Dicipta Menggunakan `[x] * n`?

Mengapakah Perubahan kepada Satu Subsenarai Mempengaruhi Semua Subsenarai dalam Senarai Python Senarai Dicipta Menggunakan `[x] * n`?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 10:59:41342semak imbas

Why Do Changes to One Sublist Affect All Sublists in a Python List of Lists Created Using `[x] * n`?

Senarai Senarai: Perubahan Tidak Dijangka Merentas Subsenarai Dijelaskan

Dalam Python, apabila membuat senarai senarai, menggunakan [x] * n akan menghasilkan senarai dengan berbilang rujukan kepada senarai asas yang sama. Tingkah laku ini boleh membawa kepada perubahan yang tidak dijangka dalam semua subsenarai apabila mengubah suai nilai dalam satu subsenarai.

Sebagai contoh, pertimbangkan kod berikut:

xs = [[1] * 4] * 3

Kod ini mencipta senarai senarai, di mana setiap satu subsenarai merujuk senarai asas yang sama bagi empat 1s. Apabila kita menukar salah satu elemen dalam subsenarai:

xs[0][0] = 5

Perubahan ditunjukkan pada semua subsenarai. Ini berlaku kerana senarai asal senarai hanya mempunyai tiga rujukan kepada subsenarai asas yang sama, bukan tiga subsenarai yang berbeza.

Untuk mencipta subsenarai berasingan dengan nilai yang berbeza, anda boleh menggunakan pemahaman senarai:

xs = [[1] * 4 for _ in range(3)]

Dalam kes ini, pemahaman senarai mencipta senarai baharu empat 1 untuk setiap elemen dalam senarai senarai baharu, menghasilkan tiga yang berbeza subsenarai.

Atas ialah kandungan terperinci Mengapakah Perubahan kepada Satu Subsenarai Mempengaruhi Semua Subsenarai dalam Senarai Python Senarai Dicipta Menggunakan `[x] * n`?. 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