Pourquoi les ensembles Python semblent-ils avoir une commande ?

Barbara Streisand
Libérer: 2024-11-14 22:27:02
original
565 Les gens l'ont consulté

Why Do Python Sets Appear to Have an Order?

Comprendre l'ordre apparent dans les ensembles Python

Bien que les ensembles Python soient intrinsèquement non ordonnés, l'ordre d'affichage apparemment cohérent a soulevé des questions. Cet article explore le mécanisme derrière cet ordre apparent.

Hachage et placement de la mémoire

Python utilise le hachage pour déterminer l'emplacement de la mémoire des éléments d'un ensemble. Le hachage de chaque élément est calculé et les N derniers bits (déterminés par la taille de l'ensemble) sont utilisés comme indices de tableau. Cela explique pourquoi les éléments avec certaines valeurs de hachage se retrouvent dans des emplacements de mémoire spécifiques.

Résolution des collisions

Lorsque des collisions de hachage se produisent (lorsque deux éléments ont le même hachage), un L'algorithme de résolution de collision intervient. Cet algorithme détermine quels éléments occupent les « meilleurs » emplacements mémoire. Le processus de résolution détermine partiellement l'ordre des éléments dans l'ensemble.

Ordre d'insertion (Python 3.6 et supérieur)

À partir de CPython 3.6, les dictionnaires (et non les ensembles) ont gagné la possibilité de conserver l’ordre d’insertion pour l’itération. Cette fonctionnalité permet aux éléments d'être itérés dans le même ordre dans lequel ils ont été insérés, même si leurs hachages sont en conflit. Cependant, cette préservation de l'ordre d'insertion n'est actuellement pas étendue aux ensembles.

Exemples

Considérez les exemples suivants :

set_1 = set([5, 2, 7, 2, 1, 88])
set_2 = set([5, 2, 7, 2, 1, 88])
print(set_1)  # prints set([88, 1, 2, 5, 7])
print(set_2)  # prints set([88, 1, 2, 5, 7])
Copier après la connexion

Dans ce cas, l'ordre cohérent est dû à des valeurs de hachage identiques pour tous les éléments. Les collisions de hachage entraînent la même résolution de collision, conduisant à un ordre identique.

Cependant, cet ordre n'est pas garanti et peut changer si des éléments sont insérés dans un ordre différent ou si les hachages changent. Par exemple :

list1 = [8, 16, 24]
set(list1)        # prints set([8, 16, 24])
list2 = [24, 16, 8]
set(list2)        # prints set([24, 16, 8])
Copier après la connexion

L'ordre inverse dans le deuxième ensemble est le résultat de différents résultats de résolution de collision dus à la réorganisation de la liste d'entrée.

Conclusion

L'ordre apparent dans les ensembles Python résulte d'une combinaison de hachage, de placement de mémoire et de résolution de collision. Bien que l'ordre d'insertion ne soit pas garanti, il peut apparaître dans certains scénarios en raison de la cohérence du hachage et des résultats de résolution des collisions.

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.cn
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