以下是我要做的事情的简化版本:

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次,所以似乎正在发生这种情况:
我不明白为什么会发生这种事,也不知道我该怎么解决。

最佳答案

不确定,但我认为你的问题是这句话:

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)

印刷品
工商管理硕士
bbb公司
abb公司
bbb公司

关于python - Python中的递归和列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14646449/

10-11 18:12