Reparenting scripts changes the “state” in which they run in, whether they use script.Parent expecting a gui or part, and is an outside/environmental factor.
Destroying running scripts is effectively the same as reparenting, but afaik destroyed scripts stop running once the thread yields (and parenting to nil disconnects all connections made by that script), which could make results vary depending on whether they were destroyed or not.
Additionally, one could do wait(999)
or something as such and coroutine.resume()
the thread from the outside; causing unexpected behavior and possibly affecting what kind of data the script has access to, whether that be variables which were changed from a different thread, or other time dependant factors.