вы можете попытаться напечатать адрес в subset_helper, и вы можете обнаружить, что ваш temp - это тот же адрес объекта, поэтому ваш результат представляет собой список с таким же значением объекта:
def subset_helper(index, result, A, temp):
result.append(temp)
print(id(temp))
for i in range(index,len(A)):
temp.append(A[i])
subset_helper(i+1,result,A,temp)
#backtracking
temp.pop()
return
output:
1559293711304
1559293711304
1559293711304
1559293711304
[[], [], [], []]
теперь изменяется, чтобы добавить копию вашего объекта tmp:
import copy
def subset_helper(index, result, A, temp):
result.append(copy.copy(temp))
for i in range(index,len(A)):
temp.append(A[i])
subset_helper(i+1,result,A,temp)
#backtracking
temp.pop()
return
и теперь вы добавляете новый объект в список результатов, вы можете увидеть результат, как вы ожидали:
[[], [12], [12, 13], [13]]