python:recurcive列表处理更改原始列表

Mik*_*ail 8 python recursion list

我正在尝试做的是递归处理列表.我是python的新手,所以当所有代码都被编写并发送执行时,我遇到了一个奇怪的问题:在调用递归函数后,列表返回了更改.为了测试这个,我写道:

def recur(n):
    n.append(len(n))
    print '>',n
    if n[-1]<5: recur(n)
    print '<',n
Run Code Online (Sandbox Code Playgroud)

并称为功能:

recur([])
Run Code Online (Sandbox Code Playgroud)

结果如下:

> [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]
Run Code Online (Sandbox Code Playgroud)

我期望看到的是

> [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]
Run Code Online (Sandbox Code Playgroud)

,因为它是简单的整数变量:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题以及我理解错误的原因?

NPE*_*NPE 9

函数的所有递归调用都在同一个列表中运行.你需要复制一份:

def recur(n):
    n.append(len(n))
    print '>',n
    if n[-1]<5: recur(n[:])  # <<<< Note the [:]
    print '<',n
Run Code Online (Sandbox Code Playgroud)

如何通过引用传递变量的答案中有一些很好的解释