If you move rooms, you should destroy it (especially if it gets recreated) unless it is in an object that is persistent... habit makes me destroy them all and recreate in next room (better safe than sorry) TBH.
A lot of people run into issues because they have a ds_list_create() in a repeating event, and think because they are using the same variable name it just overwrites it... it doesn't, it makes a new one... instead create the list once and use ds_list_clear or whatnot if you need the ds_ again.
For example, I use a global priority Q that is checked for new entries every step in a particular object for the whole game for a turn-based strategy. Its job is to kick off a particular set of events (in order of course lol) when they are triggers by an instance. I never get a memory leak. If I was changing rooms, I destroy it and remake it.