After checking the source code it seems that PySystemState is singleton
public class PySystemState extends PyObject implements ClassDictInit {
...
private static boolean initialized = false;
...
public static synchronized PySystemState doInitialize(Properties preProperties,
Properties postProperties,
String[] argv,
ClassLoader classLoader,
ExtensiblePyObjectAdapter adapter) {
if (initialized) {
return Py.defaultSystemState;
}
initialized = true;
...
This implies that PySysStatus properties are set only once and next call to get PySysState will return you the same Jython environment.
There is still way to use custom ClassLoader to initialize different PySysState in different contexts, but for my task at hand it is not required.