基本上,这就是问题所在。我有一个带有可选参数的类: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()不起作用!
答案 0 :(得分:2)
您必须制作副本才能不修改self.lst
对于简单列表,仅list()
就足够了,但由于您有嵌套列表,因此应使用copy.deepcopy()
。
所以你可以改变你的声明:
s = copy.deepcopy(self.lst)