我想要做的是递归处理一个列表。我对Python还不太熟悉,当所有代码都编写并执行时,我遇到了一个奇怪的问题:在调用递归函数后,列表返回了改变。为了测试这个问题,我写了以下代码:
def recur(n):
n.append(len(n))
print '>',n
if n[-1]<5: recur(n)
print '<',n
并调用该函数:
recur([])
这是结果:
> [0]
> [0, 1]
> [0, 1, 2]
> [0, 1, 2, 3]
> [0, 1, 2, 3, 4]
> [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
我期望看到的是
> [0]
> [0, 1]
> [0, 1, 2]
> [0, 1, 2, 3]
> [0, 1, 2, 3, 4]
> [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4, 5]
< [0, 1, 2, 3, 4]
< [0, 1, 2, 3]
< [0, 1, 2]
< [0, 1]
< [0]
对于简单的整数变量来说,情况是一样的:
def recur(n):
n=n+1
print '>',n
if n<5: recur(n)
print '<',n
recur(0)
> 1
> 2
> 3
> 4
> 5
< 5
< 4
< 3
< 2
< 1
我应该如何解决这种情况,我对此有什么误解吗?