It is notably an implementation issue, not a language one (however the typing is different in the languages).
Pedantically, both Python & C++ are Turing-complete languages with a lot of bindings to external libraries, so every program you could write in Python could be rewritten in C++ and vice versa.
On Linux, /usr/bin/python
(a.k.a. cpython) is a bytecode interpreter
but /usr/bin/g++
is a native compiler
So very often a C++ program would be faster than the equivalent python program.
notice that there are experimental python compilers (e.g. pypy) and experimental C++ interpreters.
So C++ is good for programs which need to be fast, but may accept more development time, and Python is good for programs which need to be written quickly.
You probably won't write a Unix shell or an OS kernel (or even an optimizing C++ compiler) in Python (but in C++ or C), and you probably won't write a sysadmin script or utility in C++ (but in Python).
Also, a C++ program can usually be distributed as a self-contained executable (either statically linked, or using many C++ shared libraries).
At last, C++ is statically typed, and Python is dynamically typed. This means that you would need to do whole program type analysis to compile Python to efficient code. However, some Javascript JIT implementations (e.g. v8) seems to show that dynamically typed languages might be efficiently compiled with a lot of efforts (on implementation development). But nobody paid for such an effort on a mythical Python whole-program compiler implementation.
BTW, some Common Lisp implementations (e.g. SBCL) brings you a dynamic typing and an expressivity close to Python with a performance close to C++.