Am I missing something, or does your first question answer itself? The question asserts a specific difference. (I don't remember how it works in Java to know if the assertion is correct.)
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