У меня есть класс pymzml.run.Reader из пакета pymzml. Это объект-генератор, при прохождении через него он дает экземпляры класса Spectrum (также из пакета pymzml). Я сравниваю разные экземпляры друг с другом. Поскольку pymzml.run.Reader является объектом-генератором, после их перебора их больше нельзя использовать, поэтому я сохраняю их в списке для сравнения позже.Добавление экземпляров объекта в список работает только с трудоемкой глубиной, как я могу это изменить?
Однако, когда я сохраняю их в списке, а затем просматриваю список, в котором напечатан идентификатор спектров, он показывает, что он сохраняет только последний спектр. Для уточнения:
import pymzml
def test(msrun):
for spectrum in msrun:
print spectrum['id']
spectrumList.append(spectrum)
print '-'*20
for i in spectrumList:
print i['id']
msrun = pymzml.run.Reader(r'JG_Ti02-C1-1_C2-01A_file1.aligned.mzML')
дает:
1
2
3
4
5
--------------------
5
5
5
5
5
pymzml имеет функцию deRef(), что делает DeepCopy спектра, поэтому следующий действительно работает правильно:
import pymzml
def test(msrun):
for spectrum in msrun:
print spectrum['id']
spectrumList.append(spectrum.deRef())
msrun = pymzml.run.Reader(r'JG_Ti02-C1-1_C2-01A_file1.aligned.mzML')
Однако , делая deepcopies является основным узким местом, которое я пытаюсь выбраться из приложения. Как добавить экземпляры спектра в список, чтобы несколько раз добавлялся не только последний спектр?
Да, вы правы, это тот же адрес памяти. Spectrum.deRef() использует deepcopy и лишает их некоторой информации, это просто занимает такое большое время. В любом случае, спасибо за ваш ответ. –