Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a list in Python- something sneaky going on?

Apologies if this doesn't make any sense, I'm very new to Python!

From testing in an interpreter, I can see that list() and [] both produce an empty list:

>>> list()
[]
>>> []
[]

From what I've learned so far, the only way to create an object is to call its constructor (__init__), but I don't see this happening when I just type []. So by executing [], is Python then mapping that to a call to list()?

like image 663
GlenCrawford Avatar asked Apr 29 '10 10:04

GlenCrawford


1 Answers

What are the key differences between using list() and []?

The most obvious and visible key difference between list() and [] is the syntax. Putting the syntax aside for a minute here, someone whose new or intermediately exposed to python might argue that they’re both lists or derive from the same class; that is true. Which furthermore increases the importance of understanding the key differences of both, most of which are outlined below.

list() is a function and [] is literal syntax.

Let’s take a look at what happens when we call list() and [] respectively through the disassembler.

>>> import dis
>>> print(dis.dis(lambda: list()))
  1           0 LOAD_GLOBAL              0 (list)
              3 CALL_FUNCTION            0 (0 positional, 0 keyword pair)
              6 RETURN_VALUE
None
>>> print(dis.dis(lambda: []))
  1           0 BUILD_LIST               0
              3 RETURN_VALUE
None

The output from the disassembler above shows that the literal syntax version doesn’t require a global lookup, denoted by the op code LOAD_GLOBAL or a function call, denoted by the op code CALL_FUNCTION.

As a result, literal syntax is faster than it’s counterpart. – Let’s take a second and look at the timings below.

import timeit
>>> timeit.timeit('[]', number=10**4)
0.0014592369552701712
>>> timeit.timeit('list()', number=10**4)
0.0033833282068371773

On another note it’s equally important and worth pointing out that literal syntax, [] does not unpack values. An example of unpacking is shown below.

>>> list('abc') # unpacks value
['a', 'b', 'c']
>>> ['abc'] # value remains packed
['abc']

What’s a literal in python?

Literals are notations or a way of writing constant or raw variable values which python recognises as built-in types.

Sourced from my post on PythonRight - what's the difference between list and [].

like image 151
Julian Camilleri Avatar answered Oct 02 '22 14:10

Julian Camilleri