原因是您将current 列表的引用附加到master。因此,每次更改 current 时,之前附加的列表也会更改。
使用此链接进行可视化:click here
>>>def recur(count,current):
count = count + 1
if (count == 5):
return
current.append(1)
master.append(current)
recur(count,current)
>>> master=[]
>>> recur(0,[])
>>> master
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> for i in master:
id(i)
2485591104264
2485591104264
2485591104264
2485591104264
>>>
方法一
你可以试试这个。无需跟踪您附加到master 的current 列表。
def recur(count):
count+=1
if count==5:
return
curr=[1]*count
#print(curr)
master.append(curr)
recur(count)
master=[]
recur(0)
print(master)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
方法二
如果你热衷于使用current,那么试试这个。
这段代码的可视化click here.
def recur(count,curr):
count+=1
if count==5:
return
curr.append(1)
master.append(curr)
recur(count,curr[:])
master=[]
recur(0,[])
print(master)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
方法3
或者你可以试试这个。
def recur(count,curr):
count+=1
if count==5:
return
curr.append(1)
master.append(curr[:])
recur(count,curr)
master=[]
recur(0,[])
print(master)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
方法四
如果你想返回[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]],那么试试这个。
def recur(count,curr):
count+=1
if count==5:
return []
curr.append(1)
return [curr]+recur(count,curr[:])
master=recur(0,[])
print(master)
another_master=recur(0,[])
print(another_master)
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]
[[1], [1, 1], [1, 1, 1], [1, 1, 1, 1]]