Reputation: 318
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
Reputation: 500377
To copy grid
, use copy.deepcopy()
. Otherwise a shallow copy is made, leading to the behaviour you describe.
Upvotes: 4