Computer hardware and computer languages are intentionally designed so that we never have to answer the question "what if X and Y happen at the same time?"* In order to be able to make sense of any computer program—in order to predict how it will behave—we have to be able to assume that the outcome of the program will be the same as if all of the memory writes and all of the memory reads performed by the program's threads happened one-by-one in some order.
Which of the astronomical number of possible orderings are allowed and which are not allowed is defined by a consistency model. There are several well known models that may be enforced by the hardware and software, but understanding how they are different from each other and which ones are appropriate in which situations is a deeper subject than I am prepared to talk about.
My point is though, no single reads or writes to a computer's memory ever happen "at the same time." reading or writing a Python variable practically always is a single, primitive memory operation. In any language, within any single process, If one thread performs a primitive memory operation X and another thread performs a primitive memory operation Y, then the end result will either be the same as if X happened before Y or, as if Y happened before X. There is no other possibility.
* When we're talking about sequences of operations, that's a whole different story. We sometimes say things like, "method calls A and B happened at the same time," but the formal way to say that is to say that the method calls were overlapped. Two sequences of operations are overlapped if there is any moment in time when both of them have started, but neither one of them has finished.