2

这是我正在尝试做的简化版本:

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 次,所以似乎正在发生这种情况:

在此处输入图像描述

我不明白为什么会发生这种情况或我应该如何解决它。

4

2 回答 2

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
bbb
bbb

于 2013-02-01T12:44:58.363 回答
0

func你需要创建一个副本oldlist,否则它会修改相同的列表。

于 2013-02-01T12:45:25.523 回答