以下是我正在尝试做的简化版本:
class a():
Requirement = 0
def func(self, oldlist, x):
newlist = [None]*3
newlist = oldlist
newlist[x] = b()
print "Class a"
g(newlist)
class b():
Requirement = 1
def g(list):
for i in range(3):
if list[i].Requirement==0:
list[i].func(list,i)
Initiallist=[None]*3
Initiallist[0]=a()
Initiallist[1]=b()
Initiallist[2]=a()
g(Initiallist)
我没有尝试表达我对文字的期望,而是制作了一些图表来表达我的想法:
这意味着应该调用类a中的函数4次。但是,它只会被调用2次,所以似乎发生了这种情况:
我不明白为什么会这样或我应该如何解决它。
答案 0 :(得分:5)
不确定,但我认为你的问题就在这一行:
newlist = oldlist
我想你想要复制列表(而不是改变oldlist
),所以你应该只使用:
newlist = oldlist[:]
将func
更改为
def func(self, oldlist, x):
newlist = oldlist[:]
newlist[x] = b()
print "".join(x.__class__.__name__ for x in newlist)
g(newlist)
打印
BBA
BBB
ABB
bbb
答案 1 :(得分:0)
在func
中,您需要创建oldlist
的副本,否则它将修改相同的列表。