Как сделать идентификатор объекта Pickle-Friend в Python?
Я пытаюсь сохранить некоторые объекты Python с Python pickle
модуль, эти объекты использует
id(object)
как их внешние идентификаторы (например, на веб-странице).
Проблема в том, что после pickle dump/load cycle
, id(object)
значение меняется. Что делает id(object)
непригоден для внешнего идентификатора, который ожидает неизменных значений.
Так как же мне удобно создать id
это не изменилось после pickle/unpickle
?
1 ответ
Ты не можешь
Документация для id
:
Вернуть "личность" объекта. Это целое число (или длинное целое число), которое гарантированно будет уникальным и постоянным для этого объекта в течение срока его службы.
Так два разных объекта (т.е. если a is not b
является True
) имеют два разных идентификатора.
Альтернативы:
(1) Если ваш тип является хэшируемым, вы можете использовать hash
:
hash((1,2,3))
(2) Только несколько вещей могут быть хэшируемыми, но вы можете перемешать маринад, например
hash(pickle.dumps([1,2,3]))
(3) Вы можете явно установить id
атрибут для каждого объекта.