How to keep 2 or more different alternative transform?
I don't know if it has already been done, but that may have a general interested, so:

This is only for object location (not rotation or other) but is a base if you need something else.
Nothing particular to say about the code. Just a UI List with some associated operators (essentially done based on the templates)... and I'm far from a Blender UI specialist...
If details are needed, please ask in comments.

As asked in comments:
import bpy 
from bpy.props import StringProperty, FloatVectorProperty, IntProperty, BoolProperty, CollectionProperty 
from bpy.types import PropertyGroup, UIList, Operator, Panel 
from mathutils import Vector

def keep_locations_index_changed(self, context):
    object = context.object
    index = object.keep_locations_index
    locations = object.keep_locations
    if object and index &gt;= 0 and locations and object.keep_locations_auto:
        if index &gt;= len(locations):
            index = len(locations) - 1
        object.location = locations[index].location

class KeepLocations(PropertyGroup): 
    name: StringProperty( name=&quot;Name&quot;, description=&quot;Name&quot;, default=&quot;Untitled&quot;) 
    location: FloatVectorProperty( name=&quot;Location&quot;, description=&quot;&quot;, update=keep_locations_index_changed, default=Vector()) 

class MY_UL_KEEPLOCATIONS(UIList): 
    def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
        custom_icon = 'OBJECT_DATAMODE'
        if self.layout_type in {'DEFAULT', 'COMPACT'}: 
            layout.label(text=item.name, icon = custom_icon) 
        elif self.layout_type in {'GRID'}: 
            layout.alignment = 'CENTER' 
            layout.label(text=&quot;&quot;, icon = custom_icon) 

class LIST_OT_NewItem(Operator): 
    &quot;&quot;&quot; Add a location to the list
    &quot;&quot;&quot;
    bl_idname = &quot;keep_locations.new_item&quot; 
    bl_label = &quot;Add a new location&quot; 

    @classmethod 
    def poll(cls, context): 
        return context.object 

    def execute(self, context): 
        obj_location = context.object.location
        locations = context.object.keep_locations
        index = len(locations)
        locations.add()
        locations[index].location = obj_location 
        context.object.keep_locations_index = index
        return{'FINISHED'} 
    
class LIST_OT_DeleteItem(Operator): 
    &quot;&quot;&quot; Remove a location from the list
    &quot;&quot;&quot;
    bl_idname = &quot;keep_locations.delete_item&quot; 
    bl_label = &quot;Deletes a location&quot; 

    @classmethod 
    def poll(cls, context): 
        return context.object and context.object.keep_locations
    
    def execute(self, context): 
        list = context.object.keep_locations 
        index = context.object.keep_locations_index
        list.remove(index) 
        context.object.keep_locations_index = min(max(0, index - 1), len(list) - 1) 
        return{'FINISHED'} 

class LIST_OT_GetLocation(Operator):
    &quot;&quot;&quot; Get the object current location and assign it to the selection
    &quot;&quot;&quot;
    bl_idname = &quot;keep_locations.get_location&quot; 
    bl_label = &quot;Gets a location&quot; 

    @classmethod 
    def poll(cls, context): 
        return context.object and context.object.keep_locations
    
    def execute(self, context): 
        list = context.object.keep_locations
        index = context.object.keep_locations_index
        list[index].location = context.object.location
        return{'FINISHED'} 

class LIST_OT_SetLocation(Operator):
    &quot;&quot;&quot; Set the select location as location of the object
    &quot;&quot;&quot;
    bl_idname = &quot;keep_locations.set_location&quot; 
    bl_label = &quot;Sets a location&quot; 

    @classmethod 
    def poll(cls, context): 
        return context.object and context.object.keep_locations
    
    def execute(self, context): 
        list = context.object.keep_locations
        index = context.object.keep_locations_index
        context.object.location = list[index].location
        return{'FINISHED'} 
    

class KeepLocationsPanel(Panel): 
    bl_label = &quot;Keep locations&quot; 
    bl_idname = &quot;OBJECT_PT_KEEP_LOCATIONS&quot; 
    bl_space_type = 'PROPERTIES' 
    bl_region_type = 'WINDOW' 
    bl_context = &quot;object&quot; 
    
    def draw(self, context): 
        layout = self.layout 
        object = context.object 
        row = layout.row() 
        row.template_list(&quot;MY_UL_KEEPLOCATIONS&quot;, &quot;Transforms&quot;, object, &quot;keep_locations&quot;, object, &quot;keep_locations_index&quot;) 
        row = layout.row() 
        row.operator(LIST_OT_NewItem.bl_idname, text='New') 
        row.operator(LIST_OT_DeleteItem.bl_idname, text='Remove') 
        
        if object.keep_locations_index &gt;= 0 and object.keep_locations:
            row = layout.row() 
            row.prop(object, &quot;keep_locations_auto&quot;)            
            item = object.keep_locations[object.keep_locations_index] 
            layout.row().prop(item, &quot;name&quot;)
            layout.row().prop(item, &quot;location&quot;) 
            row = layout.row() 
            row.operator(LIST_OT_GetLocation.bl_idname, text='Get') 
            row.operator(LIST_OT_SetLocation.bl_idname, text='Set') 

def register(): 
    bpy.utils.register_class(KeepLocations) 
    bpy.utils.register_class(MY_UL_KEEPLOCATIONS) 
    bpy.utils.register_class(LIST_OT_NewItem) 
    bpy.utils.register_class(LIST_OT_DeleteItem) 
    bpy.utils.register_class(LIST_OT_GetLocation) 
    bpy.utils.register_class(LIST_OT_SetLocation) 
    bpy.utils.register_class(KeepLocationsPanel) 
    bpy.types.Object.keep_locations_auto = BoolProperty(name = &quot;Auto update&quot;, description=&quot;Update the object location as soon as selected&quot;, default = False) 
    bpy.types.Object.keep_locations_index = IntProperty(name = &quot;Location&quot;, update=keep_locations_index_changed, default = 0) 
    bpy.types.Object.keep_locations = CollectionProperty(type = KeepLocations) 

def unregister(): 
    del bpy.types.Object.keep_locations_auto
    del bpy.types.Object.keep_locations 
    del bpy.types.Object.keep_locations_index
    bpy.utils.unregister_class(KeepLocations) 
    bpy.utils.unregister_class(MY_UL_KEEPLOCATIONS) 
    bpy.utils.unregister_class(KeepLocationsPanel) 
    bpy.utils.unregister_class(LIST_OT_NewItem) 
    bpy.utils.unregister_class(LIST_OT_DeleteItem) 
    bpy.utils.unregister_class(LIST_OT_GetLocation) 
    bpy.utils.unregister_class(LIST_OT_SetLocation) 
    
if __name__ == &quot;__main__&quot;: 
    register()