Ordre des dictionnaires dans Python 2.7 vs Python 3.3 : pourquoi ce 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']
C'est parce 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.
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!