Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
DDDasal
2024-10-21 15:22:30963semak imbas

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())

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']

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!

Kenyataan:
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