将数组取消编辑为创建时的状态
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" 方法:
- 重置将指向原来的数组,它是所有的单个实例。
- 编辑数组将从原始数组创建一个副本。然后修改它不会影响原始实例。
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
是可以编辑的实际工作副本,并且因用户而异。
我有一个二维数组,它在我的程序中的某些点进行了编辑。当我到达程序中的某个点时,我想 '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" 方法:
- 重置将指向原来的数组,它是所有的单个实例。
- 编辑数组将从原始数组创建一个副本。然后修改它不会影响原始实例。
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
是可以编辑的实际工作副本,并且因用户而异。