"Ishwor" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]

If you are curious about the detailed behavior of the CPython 
implementation, the dis module is one aid.  Compare

>>> def f1(l):
...   l.extend([1])
...   return l
...
>>> def f2(l):
...   l += [1]
...   return l
...
>>> import dis
>>> dis.dis(f1)
          0 SET_LINENO               1

          3 SET_LINENO               2
          6 LOAD_FAST                0 (l)
          9 LOAD_ATTR                1 (exten
         12 LOAD_CONST               1 (1)
         15 BUILD_LIST               1
         18 CALL_FUNCTION            1
         21 POP_TOP

         22 SET_LINENO               3
         25 LOAD_FAST                0 (l)
         28 RETURN_VALUE
         29 LOAD_CONST               0 (None)
         32 RETURN_VALUE
>>> dis.dis(f2)
          0 SET_LINENO               1

          3 SET_LINENO               2
          6 LOAD_FAST                0 (l)
          9 LOAD_CONST               1 (1)
         12 BUILD_LIST               1
         15 INPLACE_ADD
         16 STORE_FAST               0 (l)

         19 SET_LINENO               3
         22 LOAD_FAST                0 (l)
         25 RETURN_VALUE
         26 LOAD_CONST               0 (None)
         29 RETURN_VALUE

Since INPLACE_ADD ends up calling .extend, the direct call should, on 
average, be slightly faster.  But the difference is comparable to the noise 
of the variation in memory allocation time.

l.append(item) might be even faster than l.extend([item]), especially when 
item is not a contant, since the unneeded list is not built.

Terry J. Reedy



-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to