关于python:复制列表:编辑副本而不更改原始文件

Copying lists: editing copy without changing original

本问题已经有最佳答案,请猛点这里访问。

我正在制作一个程序,它需要和可编辑的临时数组,而不会影响原始数组。但是,每当我运行函数并测试它时,它会像这样编辑实际数组:

1
2
3
4
5
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]]

功能如下:

1
2
3
4
5
6
def copying(array):
    temp = []

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

该函数用于简单列表,但数组项不起作用。是否有我应该使用的替代方案?(我尝试了list()和copy())


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

copy.deepcopy(x)

Return a deep copy of x.

此函数正在复制所有内容,甚至子元素(以及子元素和…你明白我的想法)。您的简短示例已更正:

1
2
3
4
5
6
7
8
>>> 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]]