If all your containers have regular "update" functions, then in order to kill a person, you simply flag him as "dead" (but dont delete the object yet) and all containers detect and remove any dead persons during the update. Once all containers have updated, and thus have eliminated their references to that person, the dead person itself can be safely buried er... deleted.
How to know if all containers have updated?
a) a reference counter in the person that lists how many containers it is held into. Containers increase that reference counter in the person when the person is added to a container, and decrement the reference counter when the person is removed from a container.
b) guaranteed maximum amount of time for all containers to have run an update. This may seem quirky and error-prone, but is in fact fairly typical in one way or another. Just make sure you get the "guaranteed" part right.