old_pos = pos
не создает копию объекта, на который ссылается имя pos
, скорее он создает вторую ссылку с именем old_pos
на тот же объект.Действия, выполненные для pos
, влияют на тот же объект, на который ссылается old_pos
.Точно так же имена «Стивен» и «Мистер Румбальский» относятся ко мне.Если вы ударите Стивена по лицу, мистер Румбальски будет ранен, потому что два имени относятся к одному и тому же объекту - мне.
Вот 3 способа сделать реальную копию вместо второй ссылки:
Использование обозначения среза
old_pos = pos[:]
Использование конструктора списка
old_pos = list(pos)
Использование модуля копирования
from copy import copy
old_pos = copy(pos)
Обратите внимание, что все эти копии мелкиекопии, что в этом случае хорошо.Чтобы узнать разницу между мелкой копией и глубокой копией, прочитайте документацию модуля копирования .