writeback=True
заставляет полку хранить в памяти любой извлеченный предмет и записывать его обратно, когда полка закрыта. Таким образом, он потребляет гораздо больше памяти и замедляет закрытие.
Преимущество параметра в том, что с ним вам не нужно нужен искаженный код, который вы показываете в своем комментарии для изменяемых элементов, мутатор которых является методом - просто
shelf['foobar'].append(23)
работает (если shelf
был открыт с включенной обратной записью), предполагая, что элемент с ключом 'foobar'
является списком, конечно, в то время как это было бы молча без операции (оставляя элемент на диске без изменений), если shelf
был открыт без обратной записи - в последнем случае вам действительно нужно кодировать
thelist = shelf['foobar']
thelist.append(23)
shekf['foobar'] = thelist
в духе вашего комментария - что стилистически отчасти облом.
Однако, поскольку у вас есть проблемы с памятью, я определенно рекомендую , а не , используя эту сомнительную возможность обратной записи. Я думаю, что могу назвать это «сомнительным», так как я был тем, кто предложил и первым реализовал это, но это было много лет назад, и я в основном раскаялся в том, что сделал это - это порождает больше путаницы (как ваши доказательства Q), чем это допускает элегантность и удобство в перемещении кода, изначально написанного для работы с диктовками (который будет использовать первую идиому, а не вторую, и, следовательно, потребуется переписать для использования с полками без обратной трассировки). А, ну, извините, это показалось хорошей идеей в то время.