-1

Why does my variable change at every loop?

I'm training using leetcode and I found a weird problem.

There is my code:

def kidsWithCandies(candies, extraCandies: int):
    output = []
    for enfant in range(len(candies)) :
        print(candies) #Show  candies for debug
        test_candies = candies
        test_candies[enfant] = test_candies[enfant]+extraCandies
        is_great = True
        for enfant2 in range(len(test_candies)) :
            if enfant == enfant2 :
                continue
            if test_candies[enfant] < test_candies[enfant2] :
                is_great = False
        output.append(is_great)
    return output
print(kidsWithCandies([2,3,5,1,3],3))

I get this output:

[2, 3, 5, 1, 3]
[5, 3, 5, 1, 3]
[5, 6, 5, 1, 3]
[5, 6, 8, 1, 3]
[5, 6, 8, 4, 3]
[True, True, True, False, False]

The weird thing is that candies is different at every loop for no obvious reason.

Am I not understanding something?

mkrieger1
  • 19,194
  • 5
  • 54
  • 65

1 Answers1

0

You need to create a new list for test_candies, the assignment of the variable only creates a reference to the existing list.

def kidsWithCandies(candies, extraCandies: int):
    output = []
    for enfant in range(len(candies)) :
        print(candies) #Show  candies for debug
        test_candies = list(candies) # Create a new list
        test_candies[enfant] = test_candies[enfant]+extraCandies
        is_great = True
        for enfant2 in range(len(test_candies)) :
            if enfant == enfant2 :
                continue
            if test_candies[enfant] < test_candies[enfant2] :
                is_great = False
        output.append(is_great)
    return output

print(kidsWithCandies([2,3,5,1,3],3))
Dan Nagle
  • 4,384
  • 1
  • 16
  • 28