Sadly I don't think that is sufficient. The "sys" module (aka PySystemState) exists as a ThreadLocal that the jython modules written in java access through Py.getSystemState(). BTW this turns out to be a real pain in the neck when you use a thread pool to execute code for different PythonInterpreters (it requires me to track the PySystemState that should be used for each PythonInterpreter and call Py.setSystemState() with the correct PySystemState before invoking any of my python code).
I don't think there is a way via Py.java to clear the thread state (happy to be corrected). For my use case I ended up not bothering to throw away the PythonInterpreter and attempt to (with some shenanigans related to import hooks) delete and reload modules that have changed. I also however would prefer that I could just call cleanup() and remove all references and that would be it.
Does anyone else have any suggestions?