在递归函数中复制Python列表对象 - 奇怪的行为

2 投票
1 回答
2030 浏览
提问于 2025-04-17 13:45

这个递归函数:

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应该没有变化,但你可以看到它变了,为什么呢?

1 个回答

4

要复制 grid,可以使用 copy.deepcopy()。如果不这样做,就会进行浅复制,这样会导致你所描述的那种情况。

撰写回答