There are two restrictions for recursion depth. The first is the internal limit by python, which as has been noted, can be increased by setrecursionlimit(). The other is the limit on stack size enforced by the OS.
The default maximal size of the stack in many OS is 8MB, which is quite limited for deep recursion. For a depth of 100000 it means each frame can only hold 80 bytes. So even in C you can easily trigger a stack overflow by using too many local variables. Some OJs have a higher limit than 8MB (I think Codechef has too).
For interpreted languages it’s a design choice of the interpreter if it is using the OS stack for recursion or if it is building its own stack in heap memory. I think CPython is using the OS stack, while Java is not. If the interpreted language is using the OS stack, stack frames might be much larger than the memory use of the local variables, as additional context information might be stored.
To go around this limit you can increase the maximal stack size. Locally in the Linux shell you can use
ulimit -s unlimited to lift the restriction on stack size for the shell. In python itself you can use
resource.setrlimit() to do the same. It is however not clear whether this will work in an OJ as changing the system enviroment might be prohibited.