There are a number of important differences:
- Interoperability with other .NET languages. You can use other .NET libraries from an IronPython application, or use IronPython from a C# application, for example. This interoperability is increasing, with a movement toward greater support for dynamic types in .NET 4.0. For a lot of detail on this, see these two presentations at PDC 2008.
- Better concurrency/multi-core support, due to lack of a GIL. (Note that the GIL doesn’t inhibit threading on a single-core machine—it only limits performance on multi-core machines.)
- Limited ability to consume Python C extensions. The Ironclad project is making significant strides toward improving this—they’ve nearly gotten Numpy working!
- Less cross-platform support; basically, you’ve got the CLR and Mono. Mono is impressive, though, and runs on many platforms—and they’ve got an implementation of Silverlight, called Moonlight.
- Reports of improved performance, although I have not looked into this carefully.
- Feature lag: since CPython is the reference Python implementation, it has the “latest and greatest” Python features, whereas IronPython necessarily lags behind. Many people do not find this to be a problem.