我正在努力了解这门课程的内容
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 :(得分:0)
之所以发生这种情况,是因为您正在为join
提供对该列表的引用。如果您在其他地方更改列表,__init__
中的引用仍指向同一列表,因此也可以在那里看到更改。
您可以复制列表,因为它会尝试deepcopy
。
答案 1 :(得分:0)
每次调用此函数时,它都会覆盖对thr数组ss的引用,将其更改为刚刚传递给构造函数的新数组。
您还可以在类中创建此数组,并将索引和值传递给它,如下所示:
undo.add(index1,index2,value)
或者你可以创建另一个变量ss_old并让函数返回该变量,然后再将其设置为新值。