Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Pengubahsuaian Satu Subsenarai Mempengaruhi Semua Subsenarai Apabila Menggunakan Pendaraban Senarai dalam Python?

Mengapa Pengubahsuaian Satu Subsenarai Mempengaruhi Semua Subsenarai Apabila Menggunakan Pendaraban Senarai dalam Python?

DDD
DDDasal
2024-12-22 08:24:101090semak imbas

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

Senarai Perubahan Senarai Yang Dicerminkan Tanpa Jangka Merentas Subsenarai

Dalam Python, mencipta senarai senarai menggunakan pendaraban senarai, seperti dalam [[1] 4] 3, mengakibatkan situasi di mana perubahan kepada satu subsenarai mempengaruhi semua subsenarai. Tingkah laku ini berlawanan dengan intuisi dan boleh membawa kepada akibat yang tidak dijangka.

Penjelasan

Apabila menggunakan pendaraban senarai, senarai baharu ialah rujukan kepada senarai asal. Apabila anda mengubah suai elemen senarai baharu, anda sebenarnya mengubah suai elemen dalam senarai asal yang dirujuk oleh semua subsenarai.

Tingkah laku yang tidak dijangka ini berlaku kerana Python menilai operator pendaraban sebelum pemahaman senarai . Dalam kes ini, [[1] 4] menilai kepada subsenarai tunggal dan * hanya mencipta tiga rujukan kepada subsenarai itu.

Penyelesaian

Untuk mengelakkan tingkah laku ini dan mencipta tiga bebas subsenarai, anda boleh menggunakan pemahaman senarai, seperti berikut:

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

Kefahaman senarai menilai semula ungkapan [1] * 4 untuk setiap subsenarai, menghasilkan tiga subsenarai berbeza yang tidak dipautkan.

Perbandingan dengan Pendaraban Senarai

Manakala pendaraban senarai ialah cara yang mudah untuk mencipta senarai dengan elemen berulang , adalah penting untuk memahami batasannya. Pendaraban senarai beroperasi pada objek sedia ada tanpa melihat ungkapan. Ia tidak membuat salinan objek tetapi sebaliknya mencipta rujukan kepada objek sedia ada.

Sebaliknya, senaraikan pemahaman menilai semula ungkapan untuk setiap elemen, mencipta objek baharu mengikut keperluan. Tingkah laku ini memastikan setiap elemen dalam senarai adalah bebas.

Sumber Tambahan

  • [Bagaimana cara saya mengklonkan senarai supaya ia tidak berubah secara tiba-tiba selepas tugasan?](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-assignment)
  • [Bagaimana untuk memulakan tatasusunan dua dimensi (senarai senarai, jika tidak menggunakan NumPy) dalam Python?](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-dimensional-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [Senarai stor kamus hanya nilai lampiran terakhir dalam setiap lelaran](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-appended-value-in-every-iteration)

Atas ialah kandungan terperinci Mengapa Pengubahsuaian Satu Subsenarai Mempengaruhi Semua Subsenarai Apabila Menggunakan Pendaraban Senarai 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