Как сделать идентификатор объекта 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 атрибут для каждого объекта.

Другие вопросы по тегам