"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 dicionário está solicitando pós-Python 3.3 não determinístico?

Por que o dicionário está solicitando pós-Python 3.3 não determinístico?

Publicado em 2024-11-10
Navegar:770

Why Is Dictionary Ordering Non-Deterministic Post-Python 3.3?

Por que a ordem do dicionário não é determinística no Python 3.3?

Nas versões do Python anteriores à 3.3, a ordem das chaves do dicionário era arbitrária, mas consistente. No entanto, no Python 3.3, essa ordem tornou-se não determinística.

Essa mudança resulta de uma correção de segurança implementada em 2012 e habilitada por padrão no Python 3.3. A randomização de hash, introduzida para resolver vulnerabilidades de segurança, faz com que a ordem de iteração de dicionários e conjuntos seja imprevisível e difira entre as execuções do Python.

Para desabilitar a randomização de hash, você pode definir a variável de ambiente PYTHONHASHSEED como 0.

Exemplo contraintuitivo

Embora o contra-exemplo na pergunta não produza consistentemente o mesmo resultado no Python 3.3, seu número limitado de ordenações diferentes decorre do tratamento de colisões de hash.

Esta limitação não está mais presente no Python 3.6 e versões posteriores, onde a ordem de inserção dos dicionários é sempre preservada.

Declaração de lançamento Este artigo foi reimpresso em: 1729494257 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