A guide to analyzing Python performance
huyng.com
huyng.com
The line and memory profiler modules he mentions can be installed as IPython extensions, too, and you don't even have to modify your code with decorators to make them work.
Also beware crappy C extensions. After much debugging I found a quad tree implementation that leaked like a sieve. From what I understand these tools will not help with that, though it is rare.
As someone who has had to find and resolve memory issues with C extensions, I would suggest using Valgrind [0]. It is not a python tool, but (after compiling Python with to play nice with memory debuggers), it works well for debugging memory in C-extension. It basicly runs your program in a VM, where it monitors memory access and reports leaks and other potential errors (such using unitialized, unallocated or deallocated memory) along with a stack trace.