Сейчас я использую dill (расширенную версию pickle). Я хочу сериализовать свой объект, но получаю эту ошибку:
/usr/lib/python2.7/pickle.pyc in memoize(self, obj)
242 if self.fast:
243 return
--> 244 assert id(obj) not in self.memo
245 memo_len = len(self.memo)
246 self.write(self.put(memo_len))
Может ли кто-нибудь сказать мне, что эта ошибка допустила или как я могу это решить?
dill
нарушает инвариантpickle
; рекурсивные структуры не должны приводить к повторному маринованию циклических ссылок.self.memo
отслеживает то, что уже было промариновано ранее. - person Martijn Pieters   schedule 11.08.2014dill
, но утверждениеid(obj) not in self.memo
срабатывает, еслиid(obj)
уже было замечено. - person Martijn Pieters   schedule 11.08.2014dill
автор. Это просто большая коллекция использованияcopy_reg
для разных объектов, и я не нарушаю никаких инвариантовpickle
… Тем не менее, я делаю несколько обходных путей, чтобы всевозможные объекты добавлялись вmemo
изpickle
при импортеdill
. В добавлении к памятке нет дублирования, если только вы не делаете что-то странное, например,import pickle
, затемcopy_reg
что-то еще, затемimport dill
— и, вероятно, во многих случаях это даже нормально. - person Mike McKerns   schedule 11.08.2014dill
внутренности. Звучит так, как будто ОП должен попытаться создать минимальный пример, который вызывает проблему? - person Martijn Pieters   schedule 11.08.2014dill
используетpickle
; но последуйте совету Майка. - person Martijn Pieters   schedule 12.08.2014detect
методов, которые вы пробовали, как показано ниже в моем посте. Гораздо труднее помочь, не видя того, что видишь. - person Mike McKerns   schedule 12.08.2014