I wonder why the following Python code
aa = []
for x in range(5):
    bb = aa
    print(bb)
    bb.extend(['a','bb'])
    print(bb)
results in this:
[]
['a', 'bb']
['a', 'bb']
['a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb', 'a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb', 'a', 'bb', 'a', 'bb']
['a', 'bb', 'a', 'bb', 'a', 'bb', 'a', 'bb', 'a', 'bb']
Doesn't the third line bb = aa reset bb to the value of aa which is  []? Why is aa also extended when extend was only applied to bb?
Does this mean that bb = aa is not creating a copy of aa in bb but instead only referencing aa? How should I create a copy of aa that is not a reference to aa?
