Краткий ответ:
Вместо list2 = list1
, сделайте list2 = list1[:]
tl; dr
В python имя переменной просто некоторый указатель (не в смысле C
), указывающий на фактический объект, который содержит значение переменной. Поэтому, когда вы делаете variable_1 = variable_2
, у вас есть две переменные, указывающие на одну и ту же переменную. Вы можете увидеть это поведение из приведенного ниже примера
a = 5
b = a
print(id(a), id(b)) #same identity
print(a is b) #True
Если вы сделаете b = 10
позже, он создаст новый объект для b
, а id(a)
и id(b)
больше не будут равны. То же самое касается списков.
l1 = [1,2,3]
l2 = l1
id(l1), id(l2) #same identity
l1 is l2 #True
l2 = [2,3,4] #assign a new list
id(l1), id(l2) #different identities
l1 is l2 #False
Но когда вы только меняете / удаляете ... et c. определенный индекс списка, тот же список обновляется. Вы не изменяете переменную list2
l2 = l1
l2.pop()
id(l1), id(l2) #same identity
l1 is l2 #True
Поэтому вам необходимо сделать копию первого списка. list2 = list1[:]
делает это