目标:我想创建一个列表,制作一个副本,并在不影响原始图片的情况下操纵副本。
我创建了一个玩具示例来说明问题。当我复制列表并追加副本时,它会以某种方式追溯到原始版本。如何防止这种情况影响原件?
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”
答案 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)
来获得相同的结果。