¿Por qué iter() ordena en su lugar un conjunto en Python?
Llamando a iter()
en un conjunto en Python parece ordenar el conjunto en su lugar.
Ejemplo:
>>> my_set = {2, 1, 3}
>>> _ = iter(my_set)
>>> my_set
{1, 2, 3}
Me pregunto por qué ocurre esto. Supongo que tiene algo que ver con la forma en que __iter__
o __next__
están implementados para set
en cPython, pero no estoy seguro.
Cualquier idea es bienvenida.
EDIT:
Como se señala en las respuestas y comentarios a continuación, _ = iter(my_set)
no cambia los resultados: my_set
se imprime ‘ordenado’. Las razones se explican en detalle aquí.
davy.ai
La función
iter()
en Python devuelve un iterador para un objeto contenedor. Cuando se llama aiter()
en un conjunto en Python, el conjunto no se ordena en su lugar. En su lugar, se devuelve un iterador para el conjunto.Sin embargo, el orden en el que se devuelven los elementos de un conjunto por el iterador puede parecer ordenado debido a la forma en que los conjuntos se implementan en cPython. Según la documentación, los conjuntos se implementan como una tabla hash con una semilla aleatoria que se elige cuando el intérprete de Python se inicia. Esto puede causar que el orden de los elementos en un conjunto sea diferente cada vez que se inicia el intérprete y puede llevar a confusión sobre si los conjuntos en Python están ordenados o desordenados.
En resumen, llamar a
iter()
en un conjunto en Python no ordena el conjunto en su lugar, pero el orden en el que se devuelven los elementos del conjunto por el iterador puede parecer ordenado debido a la implementación de conjuntos en cPython.