¿Por qué es [] más rápido que list ()?
Recientemente comparé las velocidades de procesamiento de[]
ylist()
y me sorprendió descubrir que[]
carrerasmás de tres veces más rápido quelist()
. Hice la misma prueba con{}
ydict()
y los resultados fueron prácticamente idénticos:[]
y{}
ambos tomaron alrededor de 0,128 segundos / millón de ciclos, mientras quelist()
ydict()
tomó aproximadamente 0.428 segundos / millón de ciclos cada uno.
¿Por qué es esto? Hacer[]
y{}
(y probablemente()
y''
, también) inmediatamente devuelve copias de un literal de stock vacío mientras que sus contrapartes explícitamente nombradas (list()
, dict()
, tuple()
, str()
) ¿van a crear un objeto, tengan o no elementos?
No tengo idea de cómo difieren estos dos métodos, pero me encantaría descubrirlo. No pude encontrar una respuesta en los documentos o en SO, y la búsqueda de paréntesis vacíos resultó ser más problemático de lo que esperaba.
Obtuve mis resultados de tiempo llamandotimeit.timeit("[]")
ytimeit.timeit("list()")
ytimeit.timeit("{}")
ytimeit.timeit("dict()")
, para comparar listas y diccionarios, respectivamente. Estoy ejecutando Python 2.7.9.
Hace poco descubrí "¿Por qué si es verdadero más lento que si 1?"que compara el rendimiento deif True
aif 1
y parece tocar un escenario similar literal-versus-global similar; quizás valga la pena considerarlo también.