"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué cambió el comportamiento de ordenación del diccionario entre Python 2.7 y 3.3, y cómo evolucionó posteriormente?

¿Por qué cambió el comportamiento de ordenación del diccionario entre Python 2.7 y 3.3, y cómo evolucionó posteriormente?

Publicado el 2024-11-02
Navegar:705

Why Did the Dictionary Ordering Behavior Change Between Python 2.7 and 3.3, and How Did It Evolve Later?

Orden del diccionario en Python 2.7 vs Python 3.3: ¿Por qué el cambio?

En Python 2.7, el orden de las claves del diccionario era arbitrario pero consistente . Sin embargo, este comportamiento cambió en Python 3.3, donde el orden de las claves obtenidas de métodos como vars() parece no determinista.

Este no determinismo surgió de una solución de seguridad implementada en 2012, que estaba habilitada de forma predeterminada en Python 3.3. La solución introdujo la aleatorización de hash para evitar ciertas vulnerabilidades de seguridad. Como resultado, el orden de iteración de diccionarios y conjuntos se volvió impredecible.

En Python 3.6, se introdujo una nueva implementación para la clase dict que preserva el orden de inserción. En consecuencia, a partir de Python 3.7, el comportamiento de conservación del orden de los diccionarios ahora está garantizado.

Consistencia inesperada en ciertos casos de uso

A pesar del orden no determinista, existen casos donde se mantiene un orden consistente. Por ejemplo:

list({str(i): i for i in range(10)}.keys())

En Python 2.7 y Python 3.6 (y posteriores), esta expresión produce consistentemente el orden:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

Esto se debe a que el contraejemplo utiliza una comprensión de conjunto, que crea un diccionario ordenado implícito. Sin embargo, en Python 3.3, el orden aún puede variar debido a las limitaciones en el manejo de colisiones hash.

Declaración de liberación Este artículo se reimprime en: 1729494555 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3