b = a[1]
a.insert(1,b)
bis a link to a[1], so when you change a link after inserting it, it appears in both places, since it essentially points to the same data.
if you want to avoid such a scenario, use deepcopy
from copy import deepcopy
a = [[1,2],[3,4]]
b = []
b = deepcopy(a[1])
a.insert(1,b)
print(a) # prints [[1, 2], [3, 4], [3, 4]]
a[2][0] = 0
print(a) # prints [[1, 2], [3, 4], [0, 4]]
source
share