如何在 python 中的递归调用中全局存储值

How to store values globally in recursive calls in python

我对 python 中的回溯方法有疑问。我如何将在递归的不同调用中形成的变量和列表(临时)存储在 python 中,正如我们所知,一旦形成的电源堆栈被销毁,变量的值也会被销毁。 例如:

avc=[]
var=0
def func(li,n,sumo,li2):
if sumo==n:
    global var
    var+=1
    #print(li2) ##line x
    adg(li2)
    return 
elif sumo>n:
    return 
else:
    for i in range(0,len(li)):
        li2.append(li[i])
        sumo=sum(li2)
        func(li,n,sumo,li2)
        li2.remove(li[i])

def adg(li3):
   global avc 
   avc.append(li3)
   #print("avc",avc)



if __name__=="__main__" :
   liq=list(map(int,input().strip().split()))
   n=liq[0]
   li=list(map(int,input().strip().split()))
   func(li,n,0,[])
   sumo=0
   count=0
   lis=[]
   j=0
   print(avc)

现在在第 x 行它确实打印了列表,但是当我在程序末尾打印 avc 时,它打印了空列表。我希望元素附加到 avc 。 请帮忙

你应该改变

   avc.append(li3)

   avc.append(li3.copy())

那是因为 avc 持有对 li3 的引用,并且通过

 li2.remove(li[i])

您也从 li3 中删除了项目,因为您将 li2 传递给了 adg,它称为 li3。

通过在 li3 上调用 .copy(),您会得到一个包含相同元素的新列表,因此当您更改 li2(或 li3)时,复制的列表不会改变。