Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

284
Vistas
¿Por qué los conjuntos de Python no conservan el orden de inserción?

Me sorprendió descubrir recientemente que, si bien se garantiza que los dictados conservan el orden de inserción en Python 3.7+, los conjuntos no lo son:

 >>> d = {'a': 1, 'b': 2, 'c': 3} >>> d {'a': 1, 'b': 2, 'c': 3} >>> d['d'] = 4 >>> d {'a': 1, 'b': 2, 'c': 3, 'd': 4}
 >>> s = {'a', 'b', 'c'} >>> s {'b', 'a', 'c'} >>> s.add('d') >>> s {'d', 'b', 'a', 'c'}

¿Cuál es la razón de esta diferencia? ¿Las mismas mejoras de eficiencia que llevaron al equipo de Python a cambiar la implementación de dict no se aplican también a los conjuntos?

No estoy buscando punteros a implementaciones de conjuntos ordenados o formas de usar dictados como suplentes para conjuntos. Me pregunto por qué el equipo de Python no hizo que los conjuntos incorporados conservaran el orden al mismo tiempo que lo hicieron para los dictados.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Discusiones

Su pregunta es pertinente y ya se ha discutido mucho en python-devs no hace mucho tiempo. R. Hettinger compartió una lista de razones en ese hilo . El estado de la cuestión parece abierto ahora, poco después de esta respuesta detallada de T. Peters.

En resumen, la implementación de dictados modernos que preservan el orden de inserción es única y no se considera apropiada con conjuntos. En particular, los dictados se usan en todas partes para ejecutar Python (por ejemplo __dict__ en espacios de nombres de objetos). Una de las principales motivaciones detrás del dict moderno fue reducir el tamaño, lo que hace que Python sea más eficiente en términos de memoria en general. Por el contrario, los conjuntos son menos frecuentes que los dictados dentro del núcleo de Python y, por lo tanto, disuaden de tal refactorización. Véase también la charla de R. Hettinger sobre la implementación moderna de dictados.


Perspectivas

La naturaleza desordenada de los conjuntos en Python es paralela al comportamiento de los conjuntos matemáticos . El orden no está garantizado.

El concepto matemático correspondiente está desordenado y sería extraño imponer tal orden - R. Hettinger

Si se introdujera orden de cualquier tipo en los conjuntos en Python, entonces este comportamiento cumpliría con una estructura matemática completamente separada, a saber, un conjunto ordenado (u Oset). Los osets juegan un rol separado en matemáticas, particularmente en combinatoria. Una aplicación práctica de Osets se observa en el cambio de campanas .

Tener conjuntos desordenados es consistente con una estructura de datos muy genérica y omnipresente que desancla la mayoría de las matemáticas modernas, es decir, la teoría de conjuntos . Envié, es bueno tener conjuntos desordenados en Python.

Ver también publicaciones relacionadas que amplían este tema:

  • Convertir una lista en un conjunto cambia el orden de los elementos
  • Obtenga valores únicos de una lista en python
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda