有一个类
Class
包含一个初始空列表 list
和一个向列表添加元素的方法。每次将元素添加到列表时,整个实例都应保存到磁盘。所以大多数情况下已经保存的数据只需要扩展最后添加元素的数据即可。
有没有一种有效的方法来实现这种行为?删除保存的数据并重新写入磁盘似乎效率不是很高。我正在寻找一种“更新已保存的数据”,就像 Git 在提交时所做的那样。
目前我使用pickle保存数据。我更喜欢保存整个
Class
实例,以免丢失类引用。
from pathlib import Path
class Class():
def __init__(self) -> None:
self.list: list[object] = []
def add_element(self, obj: object, path: Path) -> None:
self.list.append(obj)
# now update already saved data in directory given by `path`
您可以尝试使用链表来完成此任务。
假设您有元素 A B C F G 要添加到您的班级中。你的班级应该记住第一个和最近的元素。 您可以按照指向 a 和下一个元素的格式添加 A。我们称之为节点
添加 B 时,您会更新 A 节点和主要对象。 然后,当您添加 C 时,您仅更新 B 节点和主对象。 然后,当您添加 D 时,您仅更新 C 节点和主对象。
所以每次你只更新最后一个Last节点和你的对象来记住你的最后一个节点。
虽然它仍然更新您的对象,但您的对象仅包含 2 个对象名称的数据,并且您只更新最后一个节点,因此甚至无法到达存储在所有其他节点(第一个和最后一个节点之外)内的大量数据在这个过程中更不用说被删除和重写。 因此,如果列表中有 100 万个元素,您只需更新最后一个元素的节点以指向新添加的元素。
然后你可以腌制所有节点,保持它们相同的结构。