复制列表:编辑副本而不更改原件

时间:2014-05-18 21:09:43

标签: python arrays

我制作的程序需要和可编辑的临时数组不会影响原始程序。但是,每当我运行该函数并对其进行测试时,它就会编辑实际的数组:

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 个答案:

答案 0 :(得分:1)

您需要使用function deepcopy from copy module

  

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]]