Потому что С компилируется в машинный код, который исполняется процессором, а твой питон использует посредника (интерпретатор), чтоб выполнять код.
Потому что низкоуровневый язык позволяет более точно выделять память, что позволяет её экономить. Т.е. писать менее требовательный код. В то время как ты выделишь под число (int) кхм... 2 байта, а надо всего 1 байт (Byte), то ты теряешь где-то навсегда 1 байт. Если посмотреть в масштабе, то код на С уже экономичнее в два раза. А мы ещё говорим только об одном типе.