Is there a difference between using a dict literal and a dict constructor? Is there a difference between using a dict literal and a dict constructor? python python

Is there a difference between using a dict literal and a dict constructor?


I think you have pointed out the most obvious difference. Apart from that,

the first doesn't need to lookup dict which should make it a tiny bit faster

the second looks up dict in locals() and then globals() and the finds the builtin, so you can switch the behaviour by defining a local called dict for example although I can't think of anywhere this would be a good idea apart from maybe when debugging


Literal is much faster, since it uses optimized BUILD_MAP and STORE_MAP opcodes rather than generic CALL_FUNCTION:

> python2.7 -m timeit "d = dict(a=1, b=2, c=3, d=4, e=5)"1000000 loops, best of 3: 0.958 usec per loop> python2.7 -m timeit "d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}"1000000 loops, best of 3: 0.479 usec per loop> python3.2 -m timeit "d = dict(a=1, b=2, c=3, d=4, e=5)"1000000 loops, best of 3: 0.975 usec per loop> python3.2 -m timeit "d = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}"1000000 loops, best of 3: 0.409 usec per loop


They look pretty much the same on Python 3.2.

As gnibbler pointed out, the first doesn't need to lookup dict, which should make it a tiny bit faster.

>>> def literal():...   d = {'one': 1, 'two': 2}...>>> def constructor():...   d = dict(one='1', two='2')...>>> import dis>>> dis.dis(literal)  2           0 BUILD_MAP                2              3 LOAD_CONST               1 (1)              6 LOAD_CONST               2 ('one')              9 STORE_MAP             10 LOAD_CONST               3 (2)             13 LOAD_CONST               4 ('two')             16 STORE_MAP             17 STORE_FAST               0 (d)             20 LOAD_CONST               0 (None)             23 RETURN_VALUE>>> dis.dis(constructor)  2           0 LOAD_GLOBAL              0 (dict)              3 LOAD_CONST               1 ('one')              6 LOAD_CONST               2 ('1')              9 LOAD_CONST               3 ('two')             12 LOAD_CONST               4 ('2')             15 CALL_FUNCTION          512             18 STORE_FAST               0 (d)             21 LOAD_CONST               0 (None)             24 RETURN_VALUE