-2

假设我有一个列表 ,L = [a,b,c,d]和这个列表的副本,还有一个包含递归代码的 for 循环:

    for item in L:
        if:
            *some base code*
            Lcopy.remove(item)
            L = []
            L += Lcopy[:]
        else:
            *some recursion code*
    return ...

但每次递归完成后,L 又回到原来的样子。我知道一旦代码进入递归,Python 会为它使用的列表 (L) 提供一个新的内存地址,但是是否有可能使原始 L,即第一个 L,来更新和删除这些值那应该被删除?

4

2 回答 2

1

问题出在L = []

L这是指向另一个值,一个新创建的列表之后的时刻。

Python 没有对递归中的引用做任何特别的事情。列表总是通过引用传递。赋值打破了对L旧列表的引用。

于 2013-02-28T18:52:57.223 回答
0

当您拥有L = []该函数的本地名称时,您将重新分配L给一个全新的列表。如果您想清空同一个列表,则需要删除其所有内容,如下所示:del L[:]

有关 Python 执行模型的更详细说明,以及分配给变量的实际作用,请查看Jeff Knupp 的这篇博文

于 2013-02-28T19:00:06.717 回答