В вашем коде просто измените строку modelRanks = ranks
на modelRanks = ranks.copy()
.
В Python установка переменной, равной списку, просто указывает на этот объект списка;он не создает копию по умолчанию.Например:
lst = [1, 2, 3]
lst2 = lst
lst2.remove(2)
print(lst2)
# [1, 3]
print(lst)
# [1, 3]
# They're the same object!
Вы можете обойти это, явно позвонив lst.copy()
или lst[:]
( см. Документы ).Оба они выполняют так называемую мелкую копию .
lst = [1, 2, 3]
lst2 = lst.copy() # or lst2 = lst[:]
lst2.remove(2)
print(lst2)
# [1, 3]
print(lst)
# [1, 2, 3]
# Different objects!
Заметка о мелкой против глубоких копий (потому что я вижумного доказательств того, что есть некоторая путаница в этом вопросе).Из документов :
Разница между мелким и глубоким копированием относится только к составным объектам (объектам, которые содержат другие объекты, например списки или экземпляры классов):
Мелкая копия создает новый составной объект, а затем (по мере возможности) вставляет в него ссылки на объекты, найденные в оригинале.
Глубокаяcopy создает новый составной объект, а затем рекурсивно вставляет в него копии объектов, найденных в оригинале.
В основном, если ваш список содержит другие объекты и вам явно требуетсячтобы не просто указывать на такие же объекты в списке new , тогда и только тогда вам нужно использовать глубокую копию.Мелкая копия заполнит новый список 1044 * указателями на те же объекты *1045*.Удаление элементов из этого списка никак не повлияет на исходные объекты, а только удалит их из нового списка.
Глубокая копия создаст совершенно новые объекты, рекурсивно, для всегов вашем списке.Это часто не нужно, но полезно знать о различии в тех случаях, когда вы, например, хотите скопировать элементы в новый список и манипулировать только теми элементами в новом списке, а не оригинальными элементамиоткуда они были скопированы.
Если ничего из этого не имело для вас смысла, не беспокойтесь об этом.В будущем вы можете столкнуться с некоторыми головными болями при копировании списков, и в этом случае не забывайте заглядывать в глубокие и мелкие копии.