1146. Snapshot Array

class SnapshotArray:

    def __init__(self, length: int):
        self.snaps = [{}]
        self.snapId = 0


    def set(self, index: int, val: int) -> None:
        self.snaps[self.snapId][index] = val

    def snap(self) -> int:
        self.snaps.append({})
        self.snapId += 1
        return self.snapId - 1



    def get(self, index: int, snap_id: int) -> int:
        while snap_id != -1:
            if index in self.snaps[snap_id]:
                return self.snaps[snap_id][index]
            snap_id -= 1
        return 0