使用自制 "deepcopy" 撤消功能?

Undo function using self made "deepcopy"?

我想创建一个 undo() 函数来撤消 python 中的最后一个操作,所以我只是在对另一个列表进行任何修改之前对列表进行深度复制(我做了一个盗版deepcopy 自己),调用 undolist,然后当我调用 undo() 时,我只是从 undolist

中弹出最后一个元素

我知道还有其他更有效的方法可以做到这一点,但考虑到我的时间限制和我的精神能力,我认为我无法将其提交。

然而,它不起作用。我要 post 一个例子,说明我如何在随机函数上实现撤消功能和盗版 deepcopy,因为代码本身超长并且使用另一种语言

我希望我说得足够清楚,如果有任何误解,我会编辑post。

main_list = [list of lists that have elements in them]


def bootleg_deepcopy(main_list):
    new_list = []
    for x in main_list:
        nx = x[:]
        new_list.append(nx)
    return new_list
    
    
def delete_elements(main_list,user_input,undolist):
    #function that deletes elements from the list if a condition isn't met
    undolist.append(bootleg_deepcopy(main_list))
    main_list[:] = [element for element in main_list if not function_that_checks_something(whatever,something)]
    return main_list


def undo(main_list,undolist):
    try:
        main_list = undolist.pop()
    except Exception as ex:
        print(ex)
    return main_list

您的撤消操作只是 returns 对 main_list 的新引用。您的 delete_elements 方法会就地覆盖 main_list (main_list[:] = ...)。我假设您希望在撤消操作中有相同的行为,以便所有包含对 main_list 的引用的地方都会自动更新。

解决方案是在 undo() 函数中使用切片运算符 (?)。我对其进行了编辑,使其包含正确的代码。

def undo(main_list,undolist):
    try:
        main_list[:] = undolist.pop()
    except Exception as ex:
        print(ex)
    return main_list