Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `dict.fromkeys` Python Dengan Nilai Boleh Berubah Menyebabkan Gelagat Tidak Dijangka?
Dalam Python 2.6 dan 3.2, gelagat dict.fromkeys dengan objek boleh ubah boleh mengejutkan. Apabila senarai digunakan sebagai nilai, mengubah suai satu entri dalam kamus mempengaruhi setiap entri lain, seperti yang ditunjukkan di bawah:
>>> xs = dict.fromkeys(range(2), []) >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: [1]}
Walau bagaimanapun, tingkah laku ini tidak berlaku dengan pemahaman dict Python 3.2:
>>> xs = {i:[] for i in range(2)} >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: []}
Sebab yang jelas bagi tingkah laku fromkeys ialah setiap entri dalam kamus yang terhasil merujuk objek yang sama. Mengubah suai objek melalui satu entri memberi kesan kepada semua yang lain. Ini boleh dijelaskan dengan mencipta kamus secara manual:
>>> a = [] >>> xs = dict.fromkeys(range(2), a)
Ini menunjukkan bahawa entri kamus semua merujuk objek yang sama:
>>> xs[0] is a and xs[1] is a True
Untuk mengelakkan tingkah laku ini, gunakan pemahaman dict atau, jika menggunakan Python 2.6 atau lebih awal, gunakan dict dengan ungkapan penjana:
xs = dict((i, []) for i in range(2))
Atas ialah kandungan terperinci Mengapakah `dict.fromkeys` Python Dengan Nilai Boleh Berubah Menyebabkan Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!