Quand l'ordre des dictionnaires en Python est-il devenu non déterministe ?

Patricia Arquette
Libérer: 2024-10-21 15:09:02
original
532 Les gens l'ont consulté

When Did Dictionary Ordering in Python Become Non-Deterministic?

Ordre de dictionnaire non déterministe en Python : une explication

L'ordre de dictionnaire en Python a connu un changement significatif entre les versions 2.7 et 3.3. Dans Python 2.7, l'ordre des clés du dictionnaire est resté cohérent et arbitraire, tandis que dans Python 3.3, l'ordre est devenu imprévisible. Ce non-déterminisme a soulevé des questions sur la raison sous-jacente et comment il affecte le comportement des dictionnaires Python.

La source du non-déterminisme

La nature non-déterministe de l'ordre des dictionnaires dans Python 3.3 provient d'un correctif de sécurité implémenté en 2012, activé par défaut dans Python 3.3. Cette mesure de sécurité a introduit la « randomisation du hachage », un processus qui rend l'ordre d'itération des dictionnaires imprévisible pour éviter les failles de sécurité.

Explication de la randomisation du hachage

La randomisation du hachage implique de modifier la fonction de hachage utilisée pour déterminer la position des éléments dans un dictionnaire. En modifiant la fonction de hachage, l'ordre dans lequel les clés sont stockées et récupérées devient imprévisible et diffère selon les exécutions de Python. Cette couche d'imprévisibilité supplémentaire améliore la sécurité des applications Python en rendant plus difficile l'exploitation par les acteurs malveillants des fonctions de hachage prévisibles.

Implications pour l'ordre des dictionnaires

L'introduction de La randomisation du hachage a des implications significatives pour l'ordre des clés du dictionnaire. Les applications qui s'appuient sur l'ordre des clés de dictionnaire peuvent rencontrer un comportement inattendu dans Python 3.3 et les versions ultérieures. Par exemple, l'ordre dans lequel les variables sont affichées à l'aide de vars() peut varier d'une exécution à l'autre.

Ordre cohérent dans certains cas

Malgré l'ordre non déterministe en Python 3.3, certains cas présentent encore un ordre cohérent. Par exemple, l'ordre des clés dans un dictionnaire construit à l'aide d'une compréhension de liste reste prévisible car l'ordre des clés dans la liste d'origine est préservé.

Désactiver la randomisation du hachage (facultatif)

Dans les anciennes versions de Python affectées par la randomisation du hachage, il est possible de la désactiver en définissant la variable d'environnement PYTHONHASHSEED à 0. Cependant, cela n'est pas conseillé car cela réduit les avantages de sécurité de la randomisation du hachage.

Futures mises à jour

Dans Python 3.6, une nouvelle implémentation de dict a été introduite qui préserve l'ordre d'insertion. De plus, dans Python 3.7, ce comportement de préservation de l'ordre est garanti, garantissant un ordre cohérent des dictionnaires dans ces versions et au-delà.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!