python指针错误:意外变量突变

时间:2015-07-28 05:59:00

标签: python list pointers recursion mutators

def divide_grid():
    G = [[1, 'p'], [2, 'g'], [3, 'r'], [4, 'p']]
    print(G)
    for color in ['p','g']:  
        lst = G
        process(lst)
        print(G)

def process(grid):
    grid[0][1] = 'g'

我在python中有这个代码,当我运行它时,我希望G保持不变(同样的东西应该打印3次。)我的印象是python没有使用指向变量的指针?但是,当我运行divide_grid()时,我得到了这个:

[[1, 'p'], [2, 'g'], [3, 'r'], [4, 'p']]
[[1, 'g'], [2, 'g'], [3, 'r'], [4, 'p']]
[[1, 'g'], [2, 'g'], [3, 'r'], [4, 'p']]

为什么会这样?如何修复它以便我可以编辑网格的过程版本而无需更改原始G?这是我的代码的一个淡化版本,为了它的工作我需要能够编辑并从这个过程函数返回网格而不更改原始。

1 个答案:

答案 0 :(得分:1)

当你将G分配给lst时,它是一个指针。

您需要使用deepcopy来避免这种情况:

from copy import deepcopy
lst = deepcopy(G)