"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا تغير سلوك ترتيب القاموس بين الإصدارين 2.7 و3.3 من Python، وكيف تطور لاحقًا؟

لماذا تغير سلوك ترتيب القاموس بين الإصدارين 2.7 و3.3 من Python، وكيف تطور لاحقًا؟

تم النشر بتاريخ 2024-11-02
تصفح:246

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

ترتيب القاموس في Python 2.7 مقابل Python 3.3: لماذا التغيير؟

في Python 2.7، كان ترتيب مفاتيح القاموس عشوائيًا ولكنه متسق . ومع ذلك، تغير هذا السلوك في Python 3.3، حيث يبدو ترتيب المفاتيح التي تم الحصول عليها من طرق مثل vars() غير حتمية.

نشأت عدم الحتمية هذه من إصلاح أمني تم تنفيذه في عام 2012، والذي تم تمكينه افتراضيًا في بيثون 3.3. قدم الإصلاح التوزيع العشوائي للتجزئة لمنع بعض الثغرات الأمنية. ونتيجة لذلك، أصبح ترتيب تكرار القواميس والمجموعات غير قابل للتنبؤ به.

في Python 3.6، تم تقديم تطبيق جديد لفئة dict الذي يحافظ على ترتيب الإدراج. وبالتالي، اعتبارًا من Python 3.7، أصبح سلوك الحفاظ على ترتيب القواميس مضمونًا الآن.

اتساق غير متوقع في حالات استخدام معينة

على الرغم من الترتيب غير الحتمي، هناك الحالات التي يتم فيها الحفاظ على نظام ثابت. على سبيل المثال:

list({str(i): i for i in range(10)}.keys())
list({str(i): i for i in range(10)}.keys())
في Python 2.7 وPython 3.6 (والإصدارات الأحدث)، هذا التعبير يُنتج الترتيب باستمرار:

['0'، '1'، '2'، '3'، '4'، '5'، '6'، '7'، '8'، '9 '
list({str(i): i for i in range(10)}.keys())
هذا لأن المثال المضاد يستخدم فهمًا محددًا، مما يؤدي إلى إنشاء قاموس مرتب ضمنيًا. ومع ذلك، في Python 3.3، قد يختلف الترتيب بسبب القيود المفروضة على التعامل مع تصادمات التجزئة.

بيان الافراج تم نشر هذه المقالة على: 1729494555 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3