Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah Gelagat Susunan Kamus Berubah Antara Python 2.7 dan 3.3, dan Bagaimana Ia Berubah Kemudian?

Mengapakah Gelagat Susunan Kamus Berubah Antara Python 2.7 dan 3.3, dan Bagaimana Ia Berubah Kemudian?

DDD
Lepaskan: 2024-10-21 15:22:30
asal
1081 orang telah melayarinya

Why Did the Dictionary Ordering Behavior Change Between Python 2.7 and 3.3, and How Did It Evolve Later?

Penyusunan Kamus dalam Python 2.7 vs Python 3.3: Mengapa Perubahan?

Dalam Python 2.7, susunan kekunci kamus adalah sewenang-wenangnya tetapi konsisten . Walau bagaimanapun, tingkah laku ini berubah dalam Python 3.3, di mana susunan kekunci yang diperoleh daripada kaedah seperti vars() kelihatan bukan deterministik.

Ketidakpastian ini berpunca daripada pembetulan keselamatan yang dilaksanakan pada 2012, yang didayakan secara lalai dalam Python 3.3. Pembetulan ini memperkenalkan rawak cincang untuk mengelakkan kelemahan keselamatan tertentu. Akibatnya, susunan lelaran kamus dan set menjadi tidak dapat diramalkan.

Dalam Python 3.6, pelaksanaan baharu untuk kelas dict telah diperkenalkan yang mengekalkan susunan sisipan. Akibatnya, setakat Python 3.7, tingkah laku memelihara pesanan untuk kamus kini dijamin.

Ketekalan Tidak Dijangka dalam Kes Penggunaan Tertentu

Walaupun pesanan tidak pasti, terdapat kes di mana perintah yang konsisten dikekalkan. Contohnya:

list({str(i): i for i in range(10)}.keys())
Salin selepas log masuk

Dalam Python 2.7 dan Python 3.6 (dan lebih baru), ungkapan ini secara konsisten menghasilkan susunan:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
Salin selepas log masuk

Ini kerana contoh balas menggunakan pemahaman yang ditetapkan, yang mencipta kamus tersusun secara tersirat. Walau bagaimanapun, dalam Python 3.3, susunan mungkin masih berbeza-beza disebabkan oleh pengehadan dalam mengendalikan perlanggaran cincang.

Atas ialah kandungan terperinci Mengapakah Gelagat Susunan Kamus Berubah Antara Python 2.7 dan 3.3, dan Bagaimana Ia Berubah Kemudian?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan