Почему мой цикл обновляет переменную вне цикла?

#python

Вопрос:

 def createChildren(self):  parentPos = self.pos  children_list = []  for i, element in enumerate(parentPos):  childPos = parentPos  for n in range(8):  if element==n:  pass  else:  childPos[i] = n  children_list.append(EightQueen(childPos))    return children_list  

self.pos выглядит это так: [0,1,2,3,4,5,6,7,8] этот список передается дочерним организациям в цикле, который присваивает различные значения для изменения одного из значений в дочерних организациях.

Моя цель-составить список объектов, чьи self.pos похожи

 [1,1,2,3,4,5,6,7,8] [2,1,2,3,4,5,6,7,8] [3,1,2,3,4,5,6,7,8] ... [0,1,2,3,4,5,6,7,7] [0,1,2,3,4,5,6,7,8]  

Просто меняю только один номер за раз

Приведенный выше код возвращает объекты self.pos , которые

 [0, 2, 3, 4, 5, 6, 7, 8] [2, 2, 3, 4, 5, 6, 7, 8] [3, 2, 3, 4, 5, 6, 7, 8] [4, 2, 3, 4, 5, 6, 7, 8] [5, 2, 3, 4, 5, 6, 7, 8] [6, 2, 3, 4, 5, 6, 7, 8] [7, 2, 3, 4, 5, 6, 7, 8] [7, 0, 3, 4, 5, 6, 7, 8] [7, 1, 3, 4, 5, 6, 7, 8] [7, 3, 3, 4, 5, 6, 7, 8] [7, 4, 3, 4, 5, 6, 7, 8] [7, 5, 3, 4, 5, 6, 7, 8] [7, 6, 3, 4, 5, 6, 7, 8] [7, 7, 3, 4, 5, 6, 7, 8] ...  

Это означает, что parentPos он обновляется каждый раз, когда проходит через цикл. Почему это происходит?

Комментарии:

1. В Python = создается ссылка на объект. Он не копирует его. Так что вы всегда действуете дальше self.pos .

2. В этом есть смысл. Спасибо. Могу ли я просто скопировать атрибут (список) для работы?

3. Попробуй parentPos = self.pos[:] !

4. Это сработало великолепно. Спасибо!