In the following code, I don't get the result that I expect.
For a starting_number
, current_result
gets calculated. The value of it is appended to every_result
- at least that's what I would expect. But, the value gets overwritten in the next iteration. What's happening? Is a reference being passed instead of the value? Why?
def get_integers(current, integers=[]):
# Return the list of integers
# e.g. for current = 2, return [2, 1, 0]
if current == -1:
return integers
else:
integers.append(current)
return get_integers(current - 1, integers)
if __name__ == '__main__':
starting_numbers = [1, 2]
every_result = []
for starting_number in starting_numbers:
current_result = get_integers(starting_number)
every_result.append(current_result)
print(every_result)
# Expected output:
# [[1, 0], [2, 1, 0]]
# Actual output:
# [[1, 0, 2, 1, 0], [1, 0, 2, 1, 0]]
If I modify get_integers
like below, I get the expected output.
def get_integers(current):
return list(range(current + 1))