On the contrary, the Global Interpreter Lock provides many thread-safety guarantees. These are based on the fact that threads can only be interrupted between, not within, byte code instructions.
For example, a single list can safely be extended (as in `l += [1]`) concurrently from several threads.