Some of the changes only affect people who deal with the Python
interpreter at the C level because they're writing Python extension modules,
embedding the interpreter, or just hacking on the interpreter itself.
If you only write Python code, none of the changes described here will
affect you very much.
- Profiling and tracing functions can now be implemented in C,
  which can operate at much higher speeds than Python-based functions
  and should reduce the overhead of profiling and tracing.  This 
  will be of interest to authors of development environments for
  Python.  Two new C functions were added to Python's API,
  PyEval_SetProfile() and PyEval_SetTrace().
  The existing sys.setprofile() and
  sys.settrace() functions still exist, and have simply
  been changed to use the new C-level interface.  (Contributed by Fred
  L. Drake, Jr.)
 
- Another low-level API, primarily of interest to implementors
  of Python debuggers and development tools, was added.
  PyInterpreterState_Head() and
  PyInterpreterState_Next() let a caller walk through all
  the existing interpreter objects;
  PyInterpreterState_ThreadHead() and
  PyThreadState_Next() allow looping over all the thread
  states for a given interpreter.  (Contributed by David Beazley.)
 
- A new "et" format sequence was added to
  PyArg_ParseTuple; "et" takes both a parameter and
  an encoding name, and converts the parameter to the given encoding
  if the parameter turns out to be a Unicode string, or leaves it
  alone if it's an 8-bit string, assuming it to already be in the
  desired encoding.  This differs from the "es" format character,
  which assumes that 8-bit strings are in Python's default ASCII
  encoding and converts them to the specified new encoding.
  (Contributed by M.-A. Lemburg, and used for the MBCS support on
  Windows described in the following section.)
 
- A different argument parsing function,
  PyArg_UnpackTuple(), has been added that's simpler and
  presumably faster.  Instead of specifying a format string, the
  caller simply gives the minimum and maximum number of arguments
  expected, and a set of pointers to PyObject* variables that
  will be filled in with argument values.  
 
- Two new flags METH_NOARGS and METH_O are
   available in method definition tables to simplify implementation of
   methods with no arguments or a single untyped argument. Calling
   such methods is more efficient than calling a corresponding method
   that uses METH_VARARGS. 
   Also, the old METH_OLDARGS style of writing C methods is 
   now officially deprecated.  
 
- Two new wrapper functions, PyOS_snprintf() and
   PyOS_vsnprintf() were added to provide 
   cross-platform implementations for the relatively new
   snprintf() and vsnprintf() C lib APIs. In
   contrast to the standard sprintf() and
   vsprintf() functions, the Python versions check the
   bounds of the buffer used to protect against buffer overruns.
   (Contributed by M.-A. Lemburg.)
 
- The _PyTuple_Resize() function has lost an unused
   parameter, so now it takes 2 parameters instead of 3.  The third
   argument was never used, and can simply be discarded when porting
   code from earlier versions to Python 2.2.
 
See About this document... for information on suggesting changes.