Причина в том, что вы добавляете ссылку из списка current
к мастеру. Таким образом, каждый раз, когда вы изменяете current
, также изменяются ранее добавленные списки.
Используйте эту ссылку для визуализации: нажмите здесь
>>>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
>>>
Метод 1
Вы можете попробовать это. Нет необходимости отслеживать список current
, к которому вы добавляете master
.
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]]
Метод 2
Если вы заинтересованы в использовании current
, попробуйте это. Визуализация для этого кода нажмите здесь.
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]]
Метод 4
Если вы хотите вернуть [[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]]