As I understand it, the JVM can assume that local variables are not modified by other threads. My question is why can't CPython make the same assumption?
Because it's not true! Threads in Python can muck around with the state of any other thread, at any time – it would be a language change to assume otherwise.
What op means is that it’s not true in Java as well, but the JVM assumes it is true until detecting otherwise