The PNG image won’t actually be in memory multiple times. It’s the same resource, that’s present in the memory only once, and then referenced by the widget.
GC will get rid of unused widgets, but if you call GC in the very same frame, it may not consider the parent-removed widget garbage yet.
Generally, this should be no problem, but if this doesn’t feel right to you, an alternative is simply to create your marker only once, store it in a variable, and when the player mounts the horse, just hide it. When the player unmounts the horse again, update the widget with new information and unhide it again.