Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Susunan Utama Kamus Python 3 Bukan Deterministik?
Penyusunan Bukan Penentuan Kunci Kamus dalam Python 3
Dalam Python 2, susunan kunci kamus adalah konsisten tetapi tidak dijamin. Walau bagaimanapun, dalam Python 3, susunan kekunci kamus yang diperoleh daripada fungsi seperti vars() kelihatan tidak menentukan.
Punca Bukan Penentuan
Perubahan ini ialah dikaitkan dengan pembetulan keselamatan yang dilaksanakan dalam Python 3.3. Untuk mengelakkan nilai cincang yang boleh diramal, benih rawak digunakan dalam pengiraan cincang. Rawak ini menghasilkan susunan kunci kamus yang tidak dapat diramalkan.
Memelihara Susunan dalam Python 3.6 dan Kemudian
Dalam Python 3.6, pelaksanaan baharu kamus telah diperkenalkan yang mengekalkan susunan sisipan secara lalai. Daripada Python 3.7 dan seterusnya, tingkah laku ini dijamin oleh spesifikasi bahasa Python.
Menterbalikkan Bukan Penentuan
Untuk melumpuhkan rawak cincang dan kembali kepada tingkah laku sebelumnya, tetapkan pembolehubah persekitaran PYTHONHASHSEED kepada 0. Walau bagaimanapun, ambil perhatian bahawa ini tidak digalakkan atas sebab keselamatan.
Pengecualian: Tetapkan Kekunci
Tidak seperti kamus, set dalam Python sentiasa dikekalkan tertib sisipan, tanpa mengira versi Python.
Contoh: Susunan Kunci Kamus Konsisten
Walaupun kunci kamus bukan deterministik dalam Python 3.3, menggunakan set untuk menukar kunci kamus kepada rentetan mengekalkan susunan. Contohnya:
<code class="python">set([str(i): i for i in range(10)].keys())</code>
Ini akan secara konsisten mengembalikan senarai ['0', '1', '2', '3', '4', '5', '6', '7' , '8', '9'].
Maklumat Tambahan
Rujuk dokumentasi objek.__hash__() untuk butiran lanjut tentang rawak cincang.
Atas ialah kandungan terperinci Mengapa Susunan Utama Kamus Python 3 Bukan Deterministik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!