这个递归函数:
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);
打印输出:
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]]
在我第一次调用 testchange() 之后,我的函数中的 kgrid 不应更改,但正如您所看到的,为什么?
最佳答案
要复制网格
,请使用 copy.deepcopy()
。否则会进行浅复制,从而导致您所描述的行为。
关于python - 在递归函数中复制 python 中的列表对象 - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538283/