Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

282
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!