L'ordre des éléments d'ensemble de Python démystifié
Les ensembles en Python sont des collections non ordonnées, mais certains modèles émergent dans leur ordre d'affichage. Malgré son apparente cohérence, cet ordre résulte du mécanisme de hachage de Python.
Hashage et placement mémoire
Python hache chaque élément et utilise les N derniers bits du hachage comme tableau indices pour le placement de la mémoire. L'ordre des éléments en mémoire détermine ainsi leur ordre d'affichage.
Résolution de collision
Lorsque deux éléments ont le même hachage, les mécanismes de résolution de collision les placent dans des emplacements mémoire alternatifs. L'ordre d'insertion des éléments (s'il n'y a qu'un seul élément ou plusieurs éléments avec le même hachage) influence l'emplacement exact des éléments en mémoire.
Exemple
Dans Dans les exemples suivants, l'ordre des éléments dans l'ensemble imprimé est cohérent en raison de la résolution des collisions :
set_1 = set([5, 2, 7, 2, 1, 88]) set_1 # set([88, 1, 2, 5, 7]) set_2 = set([8, 16, 24]) set_2 # set([8, 16, 24])
Notez que la modification de l'ordre d'insertion dans la liste d'entrée peut modifier l'ordre affiché en cas de collisions de touches. Par exemple :
set_3 = set([24, 16, 8]) set_3 # set([24, 16, 8])
Hachages uniques et préservation de l'ordre
Dans les cas où les éléments ont des valeurs de hachage uniques, l'ordre d'insertion est conservé :
set_4 = set([1, 2, 3]) set_4 # set([1, 2, 3])
Remarque :
L'implémentation décrite s'applique à CPython dict et set, et cela peut différer dans certaines versions. Cependant, le principe général du hachage et du placement mémoire reste le même.
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!