>>> import copy
>>> a = [[10], 20]
>>> b = a[:]
>>> c = list(a)
>>> d = a * 1
>>> e = copy.copy(a)
>>> f = copy.deepcopy(a)
>>> a.append(21)
>>> a[0].append(11)
>>> print id(a), a
30553152 [[10, 11], 20, 21]
>>> print id(b), b
44969816 [[10, 11], 20]
>>> print id(c), c
44855664 [[10, 11], 20]
>>> print id(d), d
44971832 [[10, 11], 20]
>>> print id(e), e
44833088 [[10, 11], 20]
>>> print id(f), f
44834648 [[10], 20]

Note that when using a[:], a*1, copy.copy(a) to copy a list we can get a brand new list. However, these methods fail while we want to copy a list consists of bunch of lists as elements. Since the elements of new lists generated by these methods are still the points to original lists, they will cause problem. The only correct method is copy.deepcopy(a) under this situation.