复制列表更改原始列表(python)?

时间:2019-12-19 19:43:53

标签: python list copy

目标:我想创建一个列表,制作一个副本,并在不影响原始图片的情况下操纵副本。

我创建了一个玩具示例来说明问题。当我复制列表并追加副本时,它会以某种方式追溯到原始版本。如何防止这种情况影响原件?

class testing:

    def __init__(self):
        self.array1 = [1, 2, 3, 4, 5]
        self.array2 = self.array1

    def display1(self):
        print(self.array1)

    def display2(self):
        ary = self.array2
        ary.append(6)
        print(ary)

if __name__ == "__main__":
    test = testing()
    test.display1()
    test.display2()
    test.display1()

结果是:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]

第三个结果表明,第一个列表具有仅添加到副本列表的附加“ 6”

1 个答案:

答案 0 :(得分:1)

你非常亲近。

只需在定义.copy()时添加ary

因此,在display2的第一行中,使用它代替 ary = self.array2.copy()

class testing:

    def __init__(self):
        self.array1 = [1, 2, 3, 4, 5]
        self.array2 = self.array1

    def display1(self):
        print(self.array1)

    def display2(self):
        ary = self.array2.copy()
        ary.append(6)
        print(ary)

if __name__ == "__main__":
    test = testing()
    test.display1()
    test.display2()
    test.display1()

现在返回

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5]

如chepner所述,这些是列表,而不是数组。对于Numpy数组,您可能希望使用ary = np.copy(self.array2)来获得相同的结果。