I hope that this helps explain what it means by making a new list:
>>> lista = [1, 2, 3, 4]
>>> listb = lista
>>> print lista
[1, 2, 3, 4]
>>> print listb
[1, 2, 3, 4]
>>> lista[0] = 3
>>> print listb
[3, 2, 3, 4]
>>> listc = lista[:]
>>> print listc
[3, 2, 3, 4]
>>> lista[0] = 1
>>> print listc
[3, 2, 3, 4]
When doing listb = lista
you are not making a new list, you are making an additional reference to the same list. This is shown by changing the first element in lista with lista[0] = 3
, this also changes the first element in listb. However, when slicing lista into listc with listc = lista[:]
you are copying over the values. When changing the first element of lista back to 1 with lista[0] = 1
, the first element of listc is still 3.
For speed I would expect slicing to be slower but this should not be a consideration for which one to use. As I've shown they both have a very different implication and it depends on what you are going to do with the list, rather than on speed (this is in general. There are occasion where the speed might be important).