Python中的递归和列表

时间:2013-02-01 12:35:56

标签: python recursion

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

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)      

我没有尝试表达我对文字的期望,而是制作了一些图表来表达我的想法:

enter image description here

这意味着应该调用类a中的函数4次。但是,它只会被调用2次,所以似乎发生了这种情况:

enter image description here

我不明白为什么会这样或我应该如何解决它。

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的副本,否则它将修改相同的列表。