But are there technical limitations or language features that prevent my Python script from being as fast as an equivalent C++ program?
No. It's just a question of money and resources poured into making C++ run fast vs. money and resources poured into making Python run fast.
But then Sun canceled the Self project (a mature general purpose OO language for developing large systems) to focus on a small scripting language for animated menus in TV set top boxes (you might have heard about it, it's called Java), there was no more funding. At the same time, Intel, IBM, Microsoft, Sun, Metrowerks, HP et al. spent vast amounts of money and resources making C++ fast. CPU manufacturers added features to their chips to make C++ fast. Operating Systems were written or modified to make C++ fast. So, C++ is fast.
I am not terribly familiar with Python, I'm more a Ruby person, so I will give an example from Ruby: the
Hash class (equivalent in function and importance to
dict in Python) in the Rubinius Ruby implementation is written in 100% pure Ruby; yet it competes favorably and sometimes even outperforms the
Hash class in YARV which is written in hand-optimized C. And compared to some of the commercial Lisp or Smalltalk systems (or the afore-mentioned Self VM), Rubinius's compiler isn't even that clever.
There is nothing inherent in Python that makes it slow. There are features in today's processors and operating systems that hurt Python (e.g. virtual memory is known to be terrible for garbage collection performance). There are features that help C++ but don't help Python (modern CPUs try to avoid cache misses, because they are so expensive. Unfortunately, avoiding cache misses is hard when you have OO and polymorphism. Rather, you should reduce the cost of cache misses. The Azul Vega CPU, which was designed for Java, does this.)
If you spend as much money, research and resources on making Python fast, as was done for C++, and you spend as much money, research and resources on making operating systems that make Python programs run fast as was done for C++ and you spend as much money, research and resources on making CPUs that make Python programs run fast as was done for C++, then there is no doubt in my mind that Python could reach comparable performance to C++.
We have seen with ECMAScript what can happen if just one player gets serious about performance. Within a year, we had basically a 10x performance increase across the board for all major vendors.