2014-10-10 10 views
21

Perché il costruttore di dict Python è più lento della sintassi letterale?Perché la sintassi del dict letterale è preferibile rispetto al costruttore di dict?

Dopo acceso dibattito con il mio collega, ho fatto qualche confronto e ottenuto le seguenti statistiche:

python2.7 -m timeit "d = dict(x=1, y=2, z=3)" 
1000000 loops, best of 3: 0.47 usec per loop 

python2.7 -m timeit "d = {'x': 1, 'y': 2, 'z': 3}" 
10000000 loops, best of 3: 0.162 usec per loop 

Qual è il motivo per il costruttore è più lento? E in quali situazioni, se ce ne sono, sarebbe più veloce?

+4

Di solito questo ha a che fare con il fatto che 'dict' potrebbe indicare qualcos'altro. Quindi l'interprete non può fare alcuna vera ottimizzazione. Con la sintassi '{}', può fare quelle ottimizzazioni. –

+7

cioè: 'dict' è sempre una vera chiamata di funzione, mentre' {} 'viene gestito in fase di compilazione. – Eevee

+3

possibile duplicato di [differenze tra "d = dict()" e "d = {}"] (http://stackoverflow.com/questions/2745008/differences-between-d-dict-and-d) –

risposta

28

Il costruttore è più lento perché crea l'oggetto chiamando la funzione dict(), mentre il compilatore trasforma letteralmente il dict in BUILD_MAP bytecode, salvando la chiamata di funzione.

Problemi correlati