复制列表:编辑副本而不改变原始内容

1 投票
1 回答
4730 浏览
提问于 2025-04-18 06:56

我正在制作一个程序,需要一个可以编辑的临时数组,但这个数组不能影响到原来的数组。不过,每次我运行这个功能并进行测试时,它都会修改实际的数组,像这样:

x = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
y = copying(x)
y[0][0] = 1
print(x)
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

这是我写的函数:

def copying(array):
    temp = []

    for i in array:
        temp.append(i)        
    return temp

这个函数在处理简单的列表时能正常工作,但在处理数组时就不行了。我应该使用其他方法吗?(我试过 list() 和 copy())

1 个回答

1

你需要使用来自 copy 模块的 deepcopy 函数

copy.deepcopy(x)

这个函数会返回 x 的一个深拷贝。

这个函数会把所有东西都复制一遍,包括里面的子元素(还有子元素的子元素……你应该明白我的意思)。你的简短示例已经修正如下:

>>> from copy import deepcopy
>>> x = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> y = deepcopy(x)
>>> y[0][0] = 1
>>> x
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> y
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

撰写回答