To be fair, many shells have command caching, so they effectively roll their own exec syscall wrapper:
$ python3 -c 'print("hi")'
hi
$ hash
hits command
1 /usr/bin/python3