Kaveat Fromkeys: Memahami Tingkah Laku Permulaan Kamus
Dalam Python, kaedah dict.fromkeys() biasanya digunakan untuk mencipta kamus dengan kunci yang ditentukan diberikan kepada senarai kosong. Walau bagaimanapun, salah tafsir terhadap tingkah lakunya telah membawa kepada keputusan yang tidak dijangka.
Mengapa fromkeys() Adalah Rumit
Apabila senarai kosong [] disediakan sebagai hujah kedua untuk menentukan .fromkeys(), semua nilai dalam kamus yang terhasil menghala ke objek senarai sama. Ini bermakna sebarang pengubahsuaian kepada satu nilai mempengaruhi semua nilai.
Penyelesaian Alternatif
Untuk menangani isu ini, penyelesaian berikut disyorkan:
Gunakan Pemahaman Kamus:
Dalam Python 2.7 atau ke atas, pemahaman kamus ialah penyelesaian yang paling ringkas dan boleh dibaca:
data = {k: [] for k in range(2)}
Gunakan Pemahaman Senarai dengan dict():
Dalam versi Python terdahulu, pemahaman senarai boleh dihantar ke dict() pembina:
data = dict([(k, []) for k in range(2)])
Gunakan Ungkapan Penjana dengan dict():
Dalam Python 2.4-2.6, ungkapan penjana boleh digunakan dengan dict(), dan kurungan boleh ditinggalkan:
data = dict((k, []) for k in range(2))
Contoh
Contoh berikut menggambarkan perbezaan antara kelakuan lalai fromkeys() dan penyelesaian yang disyorkan:
# Default behavior of fromkeys() data = {} data = data.fromkeys(range(2), []) data[1].append('hello') print(data) # Output: {0: ['hello'], 1: ['hello']} # Using a dictionary comprehension data = {k: [] for k in range(2)} data[1].append('hello') print(data) # Output: {0: [], 1: ['hello']}
Dengan memahami nuansa fromkeys(), pembangun boleh mencipta kamus dengan berkesan senarai kosong dan mengekalkan pengalamatan kunci individu.
Atas ialah kandungan terperinci Mengapakah `dict.fromkeys()` Mencipta Senarai Dikongsi dan Bagaimana Saya Boleh Mengelaknya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!