Proper way to detect object append, duplicate and rename

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 and post in terms of depsgraph updates regarding these 3 use cases?

Im looking of something like this:

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

I’m using Blender 2.93.6 LTS