I like to think that [list] will do a "list join", and then append is "join the first list with the second"... prepend is like swapping the two lists before joining, so, in preparation to join, swap first, the second comes first and the first goes last... maybe this help?
you can also use iemguts library for different approaches, so for example, an abstraction can "self-destruct" if you create [canvasdelete 1] and send it a bang. no need to find it, just add the logic to bang it when necessary (check canvasdelete helpfile for examples)
iemguts also adds a "delete" message that works with the id of the object in a patch, so if i created for example, an [osc~] and an [*~] in a new patch, i know that osc~ has id 0 and *~ has id 1, if i send the message [delete 0( to this patch it will delete only the osc~ (and afterwards the objects will reorder, so *~ will receive the id 0)
(and you can also send messages to the patch using [sendcanvas], which i think it is easier than using namecanvas and a send)
the documentation about the delete message also lives on the canvasdelete helpfile, btw