Por que [] é mais rápido que list ()?
Recentemente, comparei as velocidades de processamento de[]
elist()
e fiquei surpreso ao descobrir que[]
corremais de três vezes mais rápido do quelist()
. Eu fiz o mesmo teste com{}
edict()
e os resultados foram praticamente idênticos:[]
e{}
ambos levaram em torno de 0,128seg / milhão de ciclos, enquantolist()
edict()
levou aproximadamente 0,428seg / milhão de ciclos cada.
Por que é isso? Faz[]
e{}
(e provavelmente()
e''
, também) imediatamente devolva cópias de algum literal de estoque vazio, enquanto suas contrapartes nomeadas explicitamente (list()
, dict()
, tuple()
, str()
) cria completamente um objeto, com ou sem elementos?
Não tenho idéia de como esses dois métodos diferem, mas eu adoraria descobrir. Não consegui encontrar uma resposta nos documentos ou no SO, e procurar colchetes vazios acabou sendo mais problemático do que eu esperava.
Eu obtive meus resultados de tempo ligando paratimeit.timeit("[]")
etimeit.timeit("list()")
etimeit.timeit("{}")
etimeit.timeit("dict()")
, para comparar listas e dicionários, respectivamente. Estou executando o Python 2.7.9.
Eu descobri recentemente "Por que se True é mais lento que se 1?"que compara o desempenho deif True
paraif 1
e parece tocar em um cenário literal versus global semelhante; talvez valha a pena considerar também.