Python原始列表在复制后仍在修改

时间:2016-11-18 22:04:59

标签: python list copy

    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)。请帮忙

1 个答案:

答案 0 :(得分:1)

您必须改为使用copy.deepcopy(x)。