On Fri, Aug 1, 2014 at 7:29 AM, Emile van Sebille <em...@fenx.com> wrote: > And which is also how it works: > > Python 2.5 (r25:51908, Dec 18 2009, 14:22:21) > [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> >>>> def test():p = {'k':"value0",'k':"value1"} > ... >>>> from dis import dis >>>> dis(test) > 1 0 BUILD_MAP 0 > 3 DUP_TOP > 4 LOAD_CONST 1 ('value0') > 7 ROT_TWO > 8 LOAD_CONST 2 ('k') > 11 STORE_SUBSCR > 12 DUP_TOP > 13 LOAD_CONST 3 ('value1') > 16 ROT_TWO > 17 LOAD_CONST 2 ('k') > 20 STORE_SUBSCR > 21 STORE_FAST 0 (p) > 24 LOAD_CONST 0 (None) > 27 RETURN_VALUE
Python 2.5 is quite old now, but here's the 2.7 disassembly for the same code: >>> dis.dis(test) 1 0 BUILD_MAP 2 3 LOAD_CONST 1 ('value0') 6 LOAD_CONST 2 ('k') 9 STORE_MAP 10 LOAD_CONST 3 ('value1') 13 LOAD_CONST 2 ('k') 16 STORE_MAP 17 STORE_FAST 0 (p) 20 LOAD_CONST 0 (None) 23 RETURN_VALUE I believe it's still doing the same thing. My reading of this is: "Create a map with room for two elements. Stick this value on the stack, stick this key on the stack, stow it in the map. Repeat last sentence with a different value. Now store that resulting map." So it's still just happily overriding, although the code is different from the assignment version: >>> dis.dis(test2) 1 0 BUILD_MAP 0 3 STORE_FAST 0 (p) 6 LOAD_CONST 1 ('value0') 9 LOAD_FAST 0 (p) 12 LOAD_CONST 2 ('k') 15 STORE_SUBSCR 16 LOAD_CONST 3 ('value1') 19 LOAD_FAST 0 (p) 22 LOAD_CONST 2 ('k') 25 STORE_SUBSCR 26 LOAD_CONST 0 (None) 29 RETURN_VALUE ChrisA -- https://mail.python.org/mailman/listinfo/python-list