The GIL isn’t there just to be annoying — it means that the state of Python objects like lists, tuples and dictionaries will remain internally consistent even if these structures are being changed from separate threads “at the same time”.
There has to be some sort of construct to keep your fundamental data structures consistent and there will be some sort of cost to doing that.
I’d be interested to know what that is. I certainly hope it isn’t “very fine grained locks” because that would be expensive, and if not implemented carefully, a potential source of deadlocks.