Как сохранить экземпляр объекта на полке? - PullRequest
1 голос
/ 07 октября 2019
instance1 = class_A()
shelve["key1"] = instance1

Таким образом, instance1 является ссылкой на экземпляр class_A, сохраненный в памяти.

Размещает ли приведенный выше код ссылку на ссылку instance1 и сохраняет ли базовый экземпляр объекта на полке? Или он хранит только ссылку?

Поскольку я не хочу хранить только ссылку instance1, и когда программа закрывается, базовый объект освобождается, тогда ссылка instance1 становится недействительной в следующемзапуск программы.

1 Ответ

1 голос
/ 07 октября 2019

Полки не хранят ссылки на экземпляры в памяти. Они сериализуют объекты с pickle и хранят сериализованные представления, из которых объекты могут впоследствии быть воссозданы. Для shelve было бы невозможно выполнить свою работу, если бы он попытался сохранить ссылки (и попытка сохранить «экземпляр базового объекта» сталкивается с подобными проблемами).

...