Добавление элемента в список в Python перезаписывает все существующие элементы

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

Я пишу скрипт для чтения файла .osu и преобразования его в определенные объекты. Это должно быть сделано несколько раз для каждого «hitobject»

Часть чтения работает нормально, однако добавление объекта является проблемой

При добавлении объекта кажется, что он перезаписывает все существующие элементы в списке. Я не могу понять, почему это происходит.

Я попытался создать список «temp», в котором объекты хранятся в локальном списке вместо списка «self.notes», все та же проблема.

Я считаю, что ошибка возникает в этой части файла:

 if hitobjline != -1:
            hitobjects = self.file_lines[hitobjline 1:]
            for i in hitobjects:
                ln = i[:i.find(':')].split(',')
                new_note = [NoteType.Circle, NoteType.Hold][int(ln[3] == '128')]
                add_note = File.Note
                add_note.NoteTypeByte = ln[3]

                add_note.Note_Number = int(ln[0])
                add_note.Time = int(ln[2])
                add_note.NoteType = new_note
                add_note.Raw = ln
                self.notes.append(add_note)
                print(ln, ln[3], ln[3] == '128', new_note, add_note.NoteType)
 

Для фона файлы .osu имеют синтаксис, подобный: x, y, time, type, hit, end: вещи, о которых мне не нужно беспокоиться

Я ожидал self.notes[0].NoteType , что вывод будет osureader.NoteType.Hold таким, как первая строка файла 192,192,410,128,0,2974:0:0:0:0: (128, указывающая на «Удержание»

Тем не менее, я получаю, osureader.NoteType .Обведите, последняя строка файла.

Комментарии:

1. Возможно, вы можете попробовать add_note = File.Note.copy()

2. Сделайте self.notes.append(add_note.copy())

3. add_note.copy() и add_note = File.Note.copy() оба возвращают ошибки атрибута. Любые другие предложения?