Square brackets are lists while parentheses are tuples.
A list is mutable, meaning you can change its contents:
>>> x = [1,2] >>> x.append(3) >>> x [1, 2, 3]
while tuples are not:
>>> x = (1,2) >>> x (1, 2) >>> x.append(3) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append'
The other main difference is that a tuple is hashable, meaning that you can use it as a key to a dictionary, among other things. For example:
>>> x = (1,2) >>> y = [1,2] >>> z = {} >>> z[x] = 3 >>> z {(1, 2): 3} >>> z[y] = 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
Note that, as many people have pointed out, you can add tuples together. For example:
>>> x = (1,2) >>> x += (3,) >>> x (1, 2, 3)
However, this does not mean tuples are mutable. In the example above, a new tuple is constructed by adding together the two tuples as arguments. The original tuple is not modified. To demonstrate this, consider the following:
>>> x = (1,2) >>> y = x >>> x += (3,) >>> x (1, 2, 3) >>> y (1, 2)
Whereas, if you were to construct this same example with a list, y
would also be updated:
>>> x = [1, 2] >>> y = x >>> x += [3] >>> x [1, 2, 3] >>> y [1, 2, 3]