def get_all_children(self):
zero = self.current_coords[0]
zero_row, zero_col = zero
states = []
# blank spot is not on top row(middle or bottom) so we move up!
if zero_row > 0:
swapRow = zero_row - 1
tempState = copy.copy(self.current) # a list of list of strings
tempState[zero_row][zero_col], tempState[swapRow][zero_col] = tempState[swapRow][zero_col], tempState[zero_row][zero_col]
s = State(tempState)
states.append(s)
## blank spot is not on the bottom row(middle or top) so we move down!
if zero_row < 2:
swapRow = zero_row + 1
tempState = copy.copy(self.current)
tempState[zero_row][zero_col], tempState[swapRow][zero_col] = tempState[swapRow][zero_col], tempState[zero_row][zero_col]
s = State(tempState)
states.append(s)
我有一个State类,其中包含一个名为'current'的列表列表,我正在尝试定义一个函数来获取当前状态的所有子项(移动)。在第一个IF语句中,我创建当前变量的COPY(列表列表)并将其存储在'tempState'列表中,然后我尝试交换该tempState上的值,创建一个传递该值的状态对象然后将该对象附加到列表中。一切正常。问题是当它到达第二个IF语句时。在我完成交换之后,它修改了原始的“当前”变量,即使我创建了一个副本!我无法弄清楚为什么。 我尝试了list(self.current),self.current [:],copy.cop(self.current)。请帮忙
答案 0 :(得分:1)
您必须改为使用copy.deepcopy(x)。