Mengapakah `fromkeys` dengan Objek Boleh Berubah Mencipta Nilai Dikongsi dalam Kamus Python?

Patricia Arquette
Lepaskan: 2024-10-26 11:05:29
asal
274 orang telah melayarinya

 Why Does `fromkeys` with Mutable Objects Create Shared Values in Python Dictionaries?

Penciptaan Kamus dengan fromkeys dan Mutable Objects: A Surprising Twist

Kaedah fromkeys dalam Python ialah cara mudah untuk mencipta kamus daripada jujukan kunci, semuanya dipetakan kepada nilai yang ditentukan. Walau bagaimanapun, apabila menggunakan objek boleh ubah sebagai nilai, tingkah laku yang tidak dijangka boleh berlaku.

Keingintahuan

Pertimbangkan contoh berikut dalam Python 2.6 dan 3.2:

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
print(xs)</code>
Salin selepas log masuk

Apa yang mengejutkan kami, mengubah suai senarai yang dikaitkan dengan kunci pertama ([0]) turut mempengaruhi senarai yang dikaitkan dengan kunci kedua ([1]). Ini boleh membingungkan kerana kami menjangkakan setiap kunci mempunyai nilai bebasnya sendiri.

Wahyu

Sebab kelakuan aneh ini terletak pada fakta bahawa kaedah fromkeys mencipta kamus baharu dengan rujukan kepada objek boleh ubah yang sama, dan bukannya membuat salinan berasingan. Dalam erti kata lain, semua entri kamus menghala kepada objek boleh ubah asas yang sama.

Penyelesaian

Untuk mengelakkan isu ini, kita boleh menggunakan pemahaman dict, yang mencipta yang baharu senarai untuk setiap kunci kamus:

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
print(xs)</code>
Salin selepas log masuk

Dalam Python 2.6 dan lebih lama, kita boleh mencapai tingkah laku yang sama dengan menggunakan dict() dengan ungkapan penjana:

<code class="python">xs = dict((i, []) for i in range(2))</code>
Salin selepas log masuk

Kaedah alternatif ini juga mencipta senarai berasingan untuk setiap kunci kamus.

Kesimpulan

Memahami nuansa penciptaan kamus dengan objek boleh ubah adalah penting untuk mengelakkan tingkah laku yang tidak dijangka dan mengekalkan integriti data dalam kod Python. Dengan memilih kaedah yang sesuai, kami dapat memastikan bahawa entri kamus diasingkan dengan betul dan mengelakkan kesan sampingan yang tidak diingini.

Atas ialah kandungan terperinci Mengapakah `fromkeys` dengan Objek Boleh Berubah Mencipta Nilai Dikongsi dalam Kamus Python?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!