0

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))
bluprince13
  • 4,607
  • 12
  • 44
  • 91

0 Answers0