#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. Это сработало великолепно. Спасибо!