"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi le comportement de classement des dictionnaires a-t-il changé entre Python 2.7 et 3.3, et comment a-t-il évolué plus tard ?

Pourquoi le comportement de classement des dictionnaires a-t-il changé entre Python 2.7 et 3.3, et comment a-t-il évolué plus tard ?

Publié le 2024-11-02
Parcourir:658

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

Ordre des dictionnaires dans Python 2.7 vs Python 3.3 : pourquoi le changement ?

Dans Python 2.7, l'ordre des clés du dictionnaire était arbitraire mais cohérent . Cependant, ce comportement a changé dans Python 3.3, où l'ordre des clés obtenues à partir de méthodes comme vars() semble non déterministe.

Ce non-déterminisme découle d'un correctif de sécurité implémenté en 2012, qui était activé par défaut. en Python 3.3. Le correctif a introduit la randomisation du hachage pour éviter certaines vulnérabilités de sécurité. En conséquence, l'ordre d'itération des dictionnaires et des ensembles est devenu imprévisible.

Dans Python 3.6, une nouvelle implémentation pour la classe dict a été introduite qui préserve l'ordre d'insertion. Par conséquent, depuis Python 3.7, le comportement de préservation de l'ordre pour les dictionnaires est désormais garanti.

Cohérence inattendue dans certains cas d'utilisation

Malgré l'ordre non déterministe, il existe cas où un ordre cohérent est maintenu. Par exemple :

list({str(i): i for i in range(10)}.keys())
Dans Python 2.7 et Python 3.6 (et versions ultérieures), cette expression produit systématiquement l'ordre :

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9 ']
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
Cela est dû au fait que le contre-exemple utilise une compréhension ensembliste, qui crée un dictionnaire ordonné implicite. Dans Python 3.3, cependant, l'ordre peut encore varier en raison des limitations dans la gestion des collisions de hachage.

Déclaration de sortie Cet article est reproduit à l'adresse : 1729494555. En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3