たいていのPython/C API関数は、PyObject*型の戻り値はもちろん
1つ以上の引数を持つ。この型は任意のPythonオブジェクトを表わす
不透明なデータ型へのポインタである。
全てのPythonオブジェクト型はたいていの状況(例えば代入、スコープルール、
そして引数の受渡し)でPython言語によって同じように扱われるので、
単一のC言語の型によって表われるべきというのが、ただ適切である。
ほとんど全部のPythonオブジェクトはヒープ上で生存する。
自動的もしくは静的なPyObject型の変数を決して宣言できない。
ただPyObject*型のポインタ変数だけを宣言できる。
唯一の例外は型オブジェクト
全てのPythonオブジェクトは(Pythonの整数でさえ)型と 参照回数を持っている。オブジェクトの型は、それが どの種類のオブジェクト(例えば整数、リストまたはユーザ定義 関数である。Pythonリファレンス マニュアルで説明されているように、もっと多くの種類がある) か決定する。 よく知られた型のそれぞれに対して、あるオブジェクトがその型の であるか調べるためのマクロがある。 例えば、"PyList_Check(a)"は、もし aによって指されたオブジェクトがPythonのリストであれば (そしてその場合にだけ)真である。