Представьте, что ваша полка recipes
представляет собой физическую книгу рецептов на вашей кухне.
recipes['blt'] = blt
записывает в книгу рецепт приготовления ди sh, как blt
.
* 1007. * При доступе к
recipes['blt']
получается ди sh на основе рецепта.
recipes['blt'].append("butter")
делает ди sh, а затем добавляет к нему масло. Рецепт в книге не включает в себя масло; если вы хотите переписать рецепт, вам придется сделать это отдельно.
Вот как работает shelve
. Объект Shelf
поддерживается файлом данных на диске, и каждая запись в файле содержит инструкции (в формате pickle ) для построения объекта. Доступ к полке создает объект на основе сохраненных инструкций, но изменение созданного вами объекта не изменит инструкции.
Если вы создаете полку с writeback=True
, то вместо создания нового объекта на каждом При доступе к записи полка будет кэшировать встроенные объекты и снова возвращать тот же объект, если вы снова получите доступ к той же записи. Он по-прежнему не имеет ни малейшего представления, когда вы что-либо меняете, но, поскольку он возвращает тот же объект, изменения все еще присутствуют.
Когда вы закрываете полку writeback=True
, полка будет писать новые огурцы для объектов, когда полка закрыта. Новые соленья будут отражать любые изменения объектов. Это может потребовать много ненужных записей, поскольку полка все еще не знает, когда вы изменили объект, поэтому она должна перебрать все из них, даже неизмененные.