2015-10-28 98 views
-2

我想了解什么呢该类这是什么班呢?-python

class undo: 
    def __init__(self, ss): 
     self.ss = ss 

在我的头上,应该简单地把SS的值唯一在我决定使用的变量,但是当我使用它会重写所有变量,就像共享一样。

sum_expenses[100][0] = 100 
sum_expenses[99][2] = 99 

s = 1 
a = [0 for i in range(100)] 
a[s] = undo(sum_expenses) 
output(a[1].ss) 

sum_expenses[100][0] = 0 
b = undo(sum_expenses) 
print " " 
print b.ss 
print " " 
sum_expenses[99][2] = 1 
a[2] = undo(sum_expenses) 
print a[2].ss 

我不明白为什么它会覆盖所有sum_expense的当前值的变量,当我试图把它单独,这样我可以使用sum_expenses的过去值。

谢谢你,祝你有美好的一天!

回答

0

这是因为您给__init__提供了对列表的引用。如果您在其他地方更改列表,则.ss中的参考仍指向相同的列表,所以更改在那里也可见。

您可以复制列表,因为它是2D尝试deepcopy

0

每当你调用这个函数时,它会覆盖对整个数组ss的引用,并将其更改为刚刚传递给构造函数的新数组。

您还可以创建类中这个阵列,并通过指标和价值给它,像这样:

undo.add(index1,index2,value) 

也可以使另一个变量ss_old,并有使函数返回变量将其设置为前一个新的价值。