python pointer error: unexpected variable mutation
python pointer error: unexpected variable mutation
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 的情况下编辑网格的进程版本?这是我的代码的简化版本,为了让它工作,我需要能够编辑和 return 来自这个过程函数的网格而不改变原来的。
当你把G赋值给lst时,它就是一个指针。
您需要使用深度复制来避免这种情况:
from copy import deepcopy
lst = deepcopy(G)
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 的情况下编辑网格的进程版本?这是我的代码的简化版本,为了让它工作,我需要能够编辑和 return 来自这个过程函数的网格而不改变原来的。
当你把G赋值给lst时,它就是一个指针。
您需要使用深度复制来避免这种情况:
from copy import deepcopy
lst = deepcopy(G)