0

我有一个 2D 数组,它在整个程序的某些点进行了编辑。当我到达程序中的某个点时,我想“取消编辑”数组,使其与创建数组时一样。例如

myArray = [[0, 0, 0, 0], # myArray as it is programmed in my script 
           [0, 2, 0, 2]]
... #Code runs, array is edited.

现在我的数组看起来像......

[[0, 0, 0, 0],
 [0, 0, 0, 0]]

然后发生一个事件,导致我想将数组更改回其原始状态。我可以在程序开始时创建一个 myArray 的副本并加载它,但这非常不切实际,因为我有数十个类似的数组需要以相同的方式运行,而且我可能需要取消编辑这些数组一次,这意味着我将拥有数百份。实际上,我不知道有什么方法可以做到这一点。

4

1 回答 1

1

我会采用“写时复制”的方法:

  1. 重置将指向原始数组,该数组是所有人的单个实例。
  2. 编辑数组将从原始数组创建一个副本。然后修改它不会影响原始实例。
original = [[0, 0, 0, 0], [0, 2, 0, 2]]
def edit(my_array):
    if id(my_array) == id(original):
        my_array = original.copy()
    # ... edit the array

def reset(my_array):
    my_array = original

my_array可以编辑的实际工作副本在哪里,并且在用户之间是不同的。

于 2020-06-11T14:15:51.800 回答