Проблема со списками и вложенными списками

Пишу небольшой консольный текстовый редактор. Программа собирает данные из файла и закидывает их в список построчно. Есть 2 функции: deletecol() - функция удаляющая колонку букв с номером, который указал пользователь и undo() - функция, которая позволяет откатить изменения. Функцию undo() я реализовал посредством буфера (filestatuses): он содержит изначальное состояние файла и все состояния файла после применения команд.
undo() должна брать из буфера предыдущее состояние файла и засовывать его в исходное состояние (currentfile), но на деле дебагер показал, что все работает нормально до выхода из undo(). После выполнения undo() сurrentfile сначала принимает предыдущее состояние файла, но после выхода из функции принимает в себя совершенно другое значение, к примеру после выполнения таких команд:

deletecol1 deletecol1 undo deletecol 1

из текста

1111
2222
3333

получается 1 2 3, а должно быть 11 22 33 Я подозреваю, что я что-то напутал с поверхностным/глубоким копированием, но не могу понять что

filename = input("Введите полный путь к файлу")
f = open(filename, 'r', encoding='utf-8')
currenfile = [] #Создаем список для строк текущего файла
for line in f: #Закидываем строки текущего файла в список:
    currenfile.append(line.strip())
print(currenfile)
filestatuses = []#Создаем переменную для сохранений состояния файла после выполнения команды
filestatuses.append(currenfile.copy())#Закидываем туда изначальное состояние файла

def deletecol(num_col):
    for i in range(0,len(currenfile)): #удаляем букву в каждой строчке
        if len(currenfile[i]) >= num_col:
            currenfile[i] = currenfile[i][:num_col-1] + currenfile[i][num_col:]
    filestatuses.append(currenfile.copy())#полученное состояние файла добавляем в список
    print(filestatuses)
    print(currenfile)
    return

def undo():
    currenfile = filestatuses[-2].copy() #Не работает???
    filestatuses.pop(-1)
    print(filestatuses)
    print(currenfile)
    return

while True:
        command = input("Введите команду и её аргументы(если есть)через пробел: command command_arg1 command_arg2: ")
        command = command.split(' ')
        match command[0]:
          case "deletecol":
                if len(command) == 2:
                    deletecol(int(command[1]))
          case "undo":
                undo()

Ответы (1 шт):

Автор решения: Vladyslav

В вашем коде возникает проблема с обновлением переменной currentfile в функции undo(). Проблема заключается в том, что по умолчанию Python считает переменную currentfile внутри функции undo() локальной переменной, поэтому изменения, сделанные внутри функции, не сохраняются в глобальной переменной currentfile.

def undo():
    global currenfile
    currenfile = filestatuses[-2].copy()
    filestatuses.pop(-1)
    print(filestatuses)
    print(currenfile)
    return
→ Ссылка