Проверить, изменился ли огромный список в python

Вкратце: как быстро проверить, не изменился ли огромный список в питоне? hashlibнуждается в буфере, и построить строковое представление этого списка невозможно.

Вкратце: у меня ОГРОМНЫЙ список словарей, представляющих данные. Я выполняю ряд анализов этих данных, но есть несколько аспектов метаданных, которые требуются для всех анализов, т.е. набор субъектов (каждый словарь в списке имеет ключ темы, и иногда мне просто нужен список всех субъектов, у которых есть данные, присутствующие в наборе данных.). Итак, я хотел бы реализовать следующее:

class Data:
    def __init__(self, ...):
        self.data = [{...}, {...}, ...] # long ass list of dicts
        self.subjects = set()
        self.hash = 0

    def get_subjects(self):
        # recalculate set of subjects only if necessary
        if self.has_changed():
            set(datum['subject'] for datum in self.data)

        return self.subjects

    def has_changed(self):
        # calculate hash of self.data
        hash = self.data.get_hash() # HOW TO DO THIS?
        changed = self.hash == hash
        self.hash = hash # reset last remembered hash
        return changed

Вопрос в том, как реализовать метод has_changed, а точнее, get_hash(у каждого объекта уже есть __hash__ , но по умолчанию он просто возвращает idобъекта, который не меняется, когда мы, например, добавляем элемент в список).

9
задан Manuel Ebert 26 March 2012 в 11:44
поделиться