Mengapa Susunan Utama Kamus Python 3 Bukan Deterministik?

Barbara Streisand
Lepaskan: 2024-10-21 15:07:30
asal
1010 orang telah melayarinya

Why Is Python 3 Dictionary Key Ordering Non-Deterministic?

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>
Salin selepas log masuk

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!

sumber:php
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!