Python递归列表(pop与[])

Python递归列表(pop与[]),python,list,recursion,Python,List,Recursion,我正在研究递归,我已经解决了一个问题,但我想知道发生了什么,以及为什么我第一次尝试的方法不起作用。我唯一的问题是当listOfX的长度为3时清空它 以下是无法按预期工作的原始代码: sol = [] def recLoop(levelWidth,levelOn,listOfX): if len(listOfX) == 3: sol.append([listOfX[0],listOfX[1]]) sol.append([listOfX[0],listOfX[

我正在研究递归,我已经解决了一个问题,但我想知道发生了什么,以及为什么我第一次尝试的方法不起作用。我唯一的问题是当listOfX的长度为3时清空它

以下是无法按预期工作的原始代码:

sol = []
def recLoop(levelWidth,levelOn,listOfX):
    if len(listOfX) == 3:
        sol.append([listOfX[0],listOfX[1]])
        sol.append([listOfX[0],listOfX[2]])
        listOfX = []     #THIS DOES NOT WORK

    print listOfX
    if len(levelWidth) != levelOn: 
        for x in range(levelWidth[levelOn]):
            listOfX.append(x)
            recLoop(levelWidth,levelOn+1,listOfX)

recLoop([3,2],0,[])
print sol
但是,当我使用pop时,它会像预期的那样工作,如下所示:

sol = []
def recLoop(levelWidth,levelOn,listOfX):
    if len(listOfX) == 3:
        sol.append([listOfX[0],listOfX[1]])
        sol.append([listOfX[0],listOfX[2]])
        listOfX.pop()
        listOfX.pop()
        listOfX.pop()

    print listOfX
    if len(levelWidth) != levelOn: 
        for x in range(levelWidth[levelOn]):
            listOfX.append(x)
            recLoop(levelWidth,levelOn+1,listOfX)

recLoop([3,2],0,[])
print sol
注:第一个代码的结果是:

[[0, 0], [0, 1]]
但它应该是:

[[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
声明:

listOfX = []
只需将仅作为对象引用的局部变量重新绑定到新列表。原始列表对象仍在其他位置引用,但不受此重新绑定的影响。另一方面,使用listOfX.pop直接操作该对象

您可以使用:

listOfX[:] = []
要清除列表,请执行以下操作。

语句:

listOfX = []
只需将仅作为对象引用的局部变量重新绑定到新列表。原始列表对象仍在其他位置引用,但不受此重新绑定的影响。另一方面,使用listOfX.pop直接操作该对象

您可以使用:

listOfX[:] = []
而是清除列表