First, if you're mostly interested in 1, I'd start with reading the Python source of various modules (and not jump straight to the C). Whenever I found myself reading the source of some modules, I've always learned new things about Python programming.
Second, if you're trying to learn C better, I'd personally suggest something completely different: program in it. Just statically reading source code is not going to make you understand C better (or at least, it's a limited approach; it might make you a little better, but there's only so much that reading source will get you).
After programming at least a moderately sized project in C, then I'd start looking at Python source. That's really the only way to know C better, and I really think that reading the C source of Python without knowing C well won't get you very far.
An idea for a C project
In fact, here's an idea for a C project: write a Python interpreter in C. Obviously it's not going to be even close to complete, and this is a pretty hard project, but if you only focus on some parts of the language, I think its a good idea.
Not only will it help you learn C, it will help you understand Python a lot better even before looking at the source: you'll have to have a deeper understanding of a lot of stuff in Python, you'll understand the design tradeoffs in how Python works, etc.
Then, when you do finally read Python's code, not only will you understand why some things work that way, you'll probably learn a lot of really cool C techniques that solve problems you had.