赋值重写以继续在Python类中更改原始实例变量

时间:2015-02-25 07:33:58

标签: python

基本上,这就是问题所在。我有一个带有可选参数的类:lst。 lst是一个嵌套列表。下面是一个方法,它返回它所在类的另一个实例。

self.lst = [[[1, 2]]] # this is defined in the constructor
s = self.lst
for a in s:
    for b in a:
        if b[0] != item:
             b[0] = 5
return ChangeNumb(lst=s)

此后发生的事情非常奇怪。返回ChangeNumb.lst现在是[[[5,2]]],但该方法在ALSO中运行的类ChangeNumb.lst == [[[5,2]]]。

因此,该方法不是仅返回具有不同参数的类的新实例,而是更改其所在类的self.lst。

我需要这样做,以便在返回新实例时self.lst不会改变。

请帮助

编辑:虽然我在编写类构造函数时遇到了类似的问题,但我能够将其解析为 - > self.lst = lst.copy();但是,s = self.lst.copy()不起作用!

1 个答案:

答案 0 :(得分:2)

您必须制作副本才能不修改self.lst 对于简单列表,仅list()就足够了,但由于您有嵌套列表,因此应使用copy.deepcopy()

所以你可以改变你的声明:

s = copy.deepcopy(self.lst)