If you execute the following code, what do you think will be the result?
list1 = [1]
list2 = list1
list2 += [2, 3]
assert list1 == list2, '{} != {}'.format(list1, list2)
list1 = list1 + [4, 5]
assert list1 == list2, '{} != {}'.format(list1, list2)
Will an assert error occur? The answer is yes! The reason why is because list1 = list1 + list2
is actually different from list1 += list2
in Python. Let’s see what happened when I ran the above code in the command prompt:
>>> list1 = [1]
>>> list2 = list1
>>>
>>> list2 += [2, 3]
>>> assert list1 == list2, '{} != {}'.format(list1, list2)
>>>
>>> list1 = list1 + [4, 5]
>>> assert list1 == list2, '{} != {}'.format(list1, list2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: [1, 2, 3, 4, 5] != [1, 2, 3]
As is shown above, using `+=` is not assigning a concatenation of the two lists, but actually mutating the left-hand side list (list1
). In other words, list1 += list2
is the same as list1.extend(list2)
. Interesting, right? š