Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Berikut ialah beberapa pilihan tajuk, memainkan aspek \"misteri\" dan \"tingkah laku yang tidak dijangka\": * Mengapakah `dict.fromkeys` Bertindak Sangat Pelik dengan Objek Boleh Berubah? * Misteri `d

Berikut ialah beberapa pilihan tajuk, memainkan aspek \"misteri\" dan \"tingkah laku yang tidak dijangka\": * Mengapakah `dict.fromkeys` Bertindak Sangat Pelik dengan Objek Boleh Berubah? * Misteri `d

DDD
DDDasal
2024-10-26 14:52:03924semak imbas

Here are a few title options, playing on the

Menyingkap Misteri dict.fromkeys dan Objek Boleh Berubah

Fungsi dict.fromkeys dalam Python boleh bertindak secara tidak dijangka apabila digunakan dengan objek boleh ubah, seperti yang ditunjukkan dalam contoh berikut:

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
# xs now contains {0: [1], 1: [1]} instead of {0: [1], 1: []}</code>

Gelagat Membingungkan

Tingkah laku ini nampaknya bercanggah dengan pemahaman kamus, yang mengekalkan nilai yang berbeza untuk setiap kunci:

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
# xs still contains {0: [1], 1: []}</code>

Memahami Percanggahan

Perbezaan utama terletak pada cara kedua-dua kaedah ini mencipta kamus. Dalam Python 2.6 (dan lebih awal), dict.fromkeys merujuk objek boleh ubah yang sama untuk semua kekunci, manakala pemahaman kamus mencipta objek yang berbeza untuk setiap kekunci.

Hasilnya ialah apabila xs[0] bermutasi dalam yang pertama contoh, perubahan ditunjukkan dalam xs[1] kerana ia merujuk kepada objek senarai yang sama. Sebaliknya, dalam contoh kedua, senarai adalah berbeza, jadi mutasi xs[0] tidak menjejaskan xs[1].

Mengelakkan Kejutan

Untuk mengelakkan tingkah laku yang tidak dijangka ini, adalah disyorkan untuk menggunakan pemahaman kamus apabila boleh. Jika pemahaman kamus tidak tersedia (cth., dalam Python 2.6), mencipta objek berbeza menggunakan ungkapan penjana dengan fungsi dict ialah alternatif:

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

Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, memainkan aspek \"misteri\" dan \"tingkah laku yang tidak dijangka\": * Mengapakah `dict.fromkeys` Bertindak Sangat Pelik dengan Objek Boleh Berubah? * Misteri `d. 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