ترتيب القاموس في 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، قد يختلف الترتيب بسبب القيود المفروضة على التعامل مع تصادمات التجزئة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3