将数组取消编辑为创建时的状态

Un-edit an array to how it was when it was created

我有一个二维数组,它在我的程序中的某些点进行了编辑。当我到达程序中的某个点时,我想 'un-edit' 数组使其与创建数组时一样。 例如

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 的副本并加载它,但这非常不切实际,因为我有数十个需要以相同方式操作的类似数组,而且我可能需要取消编辑数组超过一次,这意味着我将拥有数百份。我不知道有什么实际可行的方法。

我会采用 "copy on write" 方法:

  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 是可以编辑的实际工作副本,并且因用户而异。