0

我有一个具有列表作为其属性之一的类:

class Hello(object):
    stuff
    self.List = [True, False, True False]

我想将该列表的副本传递到一个元组中,这样我就可以在引用该列表的先前副本的同时更改该列表。我执行以下操作:

def getStartState(self):
    copiedList = copy.deepcopy(self.cornerList)
    fullState = (self.startingPosition[0], self.startingPosition[1], tuple(copiedList))
    return fullState

我收到一条错误消息,告诉我副本不是全局变量。我错过了什么吗?

4

1 回答 1

1

我认为这里有几个问题。

首先,您的错误可能是因为您没有导入copy模块。这是一个简单的解决方法。就在import copy文件的顶部。

第二个问题是不需要deepcopybools 这样的不可变对象列表。由于列表的成员不能原地更改,任何copy.copy(List),list(List)List[:]都可以正常工作。仅当存在嵌套的可变结构时才需要深度复制。

最后,没有必要为了从副本中创建一个元组而复制一个列表。元组是不可变的,不会修改它们的源序列,所以你可以让你的getStartState方法更简单:

def getStartState(self):
    return (self.startingPosition[0], self.startingPosition[1],
            tuple(self.cornerList))
于 2012-10-15T23:41:35.170 回答