复制列表:编辑副本而不改变原始内容
我正在制作一个程序,需要一个可以编辑的临时数组,但这个数组不能影响到原来的数组。不过,每次我运行这个功能并进行测试时,它都会修改实际的数组,像这样:
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]]