我对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。 请帮忙。
答案 0 :(得分:0)
您应该更改
avc.append(li3)
到
avc.append(li3.copy())
那是因为avc通过引用来保存对li3的引用
li2.remove(li[i])
您还从li3中删除了项目,因为您将li2传递给了adg,称为ad3。
通过在li3上调用.copy(),您将获得一个具有相同元素的新列表,因此,当您更改li2(或li3)时,复制的列表不会被更改。