Proper way to detect object append, duplicate and rename

Hi,
Im trying to detect different use cases when an object has been duplicated, appended or renamed. Currently im doing this through the depsgraph.updates being evaluated using handlers registered at startup.

What are the differences between the bpy.app.handlers.depsgraph_update_pre and post in terms of depsgraph updates regarding these 3 use cases?

Im looking of something like this:

 for update in depsgraph.updates:
     obj = update.id
     if is_appended(obj):
          ........
     elif is_duplicated(obj):
          .....
     elif is_renamed(obj):
         .....

I’m using Blender 2.93.6 LTS