title: PyArg_ParseTuple default argument
body: <p>If I have the following function and the optional argument <code>myobj</code> is not passed, does <code>myobj</code> remain <code>NULL</code> or is it set to <code>Py_None</code>?</p>
  
  <pre><code>static PyObject * myfunc(PyObject * self, PyObject * args) {
      PyObject * myobj = NULL;
      if (!PyArg_ParseTuple(args, "|O", &amp;myobj)) {
          return NULL;
      }
      // ...
  }
  </code></pre>
  
  <p>According <a href="http://docs.python.org/c-api/arg.html#parsing-arguments-and-building-values" rel="noreferrer">Parsing arguments and building values</a>, </p>
  
  <blockquote>
    <p><code>|</code> Indicates that the remaining arguments in the Python argument list are optional. The C variables corresponding to optional arguments should be initialized to their default value — when an optional argument is not specified, PyArg_ParseTuple() does not touch the contents of the corresponding C variable(s).</p>
  </blockquote>
  
  <p>Does this apply to <code>PyObject *</code>s? It's obviously a pointer that exists in C so one could say it's a C variable, but it's a pointer to a python object so one could also say it does not count as a C variable.</p>