用于列表和字典的Python递归函数奇怪的内存

时间:2018-08-07 19:41:31

标签: python list recursion

我使用Python 2.7进行编程已有一段时间了,但是当我使用递归函数时,我发现了一些奇怪的东西。谁能告诉我原因吗?您会看到我在定义“ mult3”函数的地方输入了“ l”的默认值。

def mult3(l1,l2,i=0,l=[]):
        if len(l1)!=len(l2):
        print "error: dimension incompatibility"
        return "error: operation cannot be done"
    else:
        if len(l1)==1:
            l.append(l1[0]*l2[0])
            #comment
            return l
        else:
            l.append(l1[0]*l2[0])
            del(l1[0])
            del(l2[0])
            return mult3(l1,l2,i+1)

a=mult3([1,2],[2,3])
b=mult3([2,3],[4,5])
print a,b
#-----

然后输出为:

[2,6,8,15] [2,6,8,15]

如果我删除了b=mult3([2,3],[4,5])部分,那么我会为a得到正确的答案,

[2,6]

或者如果我用以下代码替换#comment行:

l=list(l)

然后我会得到这个答案:

[2,6] [2,6,8,15]

似乎我第二次调用函数“ mult3”时,它没有将列表“ l”设置为“ []”。但是为什么呢?

0 个答案:

没有答案