Sitses
Sitses

Reputation: 318

Copy list object in python in recursive function - Strange behaviour

This recursive function:

myGrid = [[0,0,0],
          [0,0,0],
          [0,0,0]]

def testchange(grid, number=-1, number2=0):
    kgrid = list(grid)
    kgrid[number][number2] = 2
    number += 1
    number2 += 1
    if number < 2:
        print '1', kgrid
        testchange(kgrid,number,number2)
        print '2', kgrid
        testchange(kgrid,number+1,number2)

testchange(myGrid);

prints out:

1 [[0, 0, 0], [0, 0, 0], [2, 0, 0]]
1 [[0, 2, 0], [0, 0, 0], [2, 0, 0]]
2 [[0, 2, 0], [0, 0, 2], [2, 0, 0]]
2 [[0, 2, 0], [0, 0, 2], [2, 0, 2]]

in my function after I first call testchange() kgrid should not be changed, but as you can see it is, why?

Upvotes: 2

Views: 2079

Answers (1)

NPE
NPE

Reputation: 500377

To copy grid, use copy.deepcopy(). Otherwise a shallow copy is made, leading to the behaviour you describe.

Upvotes: 4

Related Questions