"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o comportamento de ordenação do dicionário mudou entre Python 2.7 e 3.3 e como ele evoluiu posteriormente?

Por que o comportamento de ordenação do dicionário mudou entre Python 2.7 e 3.3 e como ele evoluiu posteriormente?

Publicado em 2024-11-02
Navegar:282

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

Ordenação do dicionário em Python 2.7 vs Python 3.3: Por que a mudança?

No Python 2.7, a ordem das chaves do dicionário era arbitrária, mas consistente . No entanto, esse comportamento mudou no Python 3.3, onde a ordem das chaves obtidas de métodos como vars() parece não determinística.

Esse não determinismo resultou de uma correção de segurança implementada em 2012, que foi habilitada por padrão em Python 3.3. A correção introduziu a randomização de hash para evitar certas vulnerabilidades de segurança. Como resultado, a ordem de iteração de dicionários e conjuntos tornou-se imprevisível.

No Python 3.6, foi introduzida uma nova implementação para a classe dict que preserva a ordem de inserção. Consequentemente, a partir do Python 3.7, o comportamento de preservação de ordem para dicionários agora é garantido.

Consistência inesperada em certos casos de uso

Apesar da ordem não determinística, existem casos em que uma ordem consistente é mantida. Por exemplo:

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

No Python 2.7 e Python 3.6 (e posterior), esta expressão produz consistentemente a ordem:

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

Isso ocorre porque o contra-exemplo usa uma compreensão de conjunto, que cria um dicionário ordenado implícito. No Python 3.3, entretanto, a ordem ainda pode variar devido às limitações no tratamento de colisões de hash.

Declaração de lançamento Este artigo foi reimpresso em: 1729494555 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3