Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah Gelagat Susunan Kamus Berubah Antara Python 2.7 dan 3.3, dan Bagaimana Ia Berubah Kemudian?
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!