<div dir="ltr"><div><div>It's in the code. See longobject.c:<br><br>Py_SIZE(v) = ndigits*sign;<br><br></div>You can also see Py_SIZE(v) used on PyLongs all over the place in longobject.c, for example:<br><br>    v = (PyLongObject *)vv;<br>    i = Py_SIZE(v);<br><br></div>Just do a ctrl-f for Py_SIZE(v) in longobject.c. Like I said, by looking in the implementation I was able to figure out that Py_SIZE is interpreted as the sign times the number of digits (unless I'm missing something), but this should be in the docs IMO.<br><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Oct 19, 2016 at 7:24 PM Thomas Nyberg <<a href="mailto:tomuxiong@gmx.com">tomuxiong@gmx.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 10/19/2016 09:04 PM, Elliot Gorokhovsky wrote:<br class="gmail_msg">
> A quick note:<br class="gmail_msg">
><br class="gmail_msg">
> I'm working on a special-case compare function for bounded integers for<br class="gmail_msg">
> the sort stuff. By looking at the implementation, I figured out that<br class="gmail_msg">
> Py_SIZE of a long is the sign times the number of digits (...right?).<br class="gmail_msg">
> Before looking at the implementation, though, I had looked for this info<br class="gmail_msg">
> in the docs, and I couldn't find it anywhere. Since Py_SIZE is public, I<br class="gmail_msg">
> think the documentation should make clear what it returns for PyLongs,<br class="gmail_msg">
> for example somewhere on the "Integer Objects" page. Apologies if this<br class="gmail_msg">
> is specified somewhere else in the docs and I just couldn't find it.<br class="gmail_msg">
><br class="gmail_msg">
> Elliot<br class="gmail_msg">
<br class="gmail_msg">
I don't think this is right.<br class="gmail_msg">
<br class="gmail_msg">
        <a href="https://github.com/python/cpython/blob/master/Include/object.h#L119" rel="noreferrer" class="gmail_msg" target="_blank">https://github.com/python/cpython/blob/master/Include/object.h#L119</a><br class="gmail_msg">
        <a href="https://docs.python.org/3/c-api/structures.html#c.Py_SIZE" rel="noreferrer" class="gmail_msg" target="_blank">https://docs.python.org/3/c-api/structures.html#c.Py_SIZE</a><br class="gmail_msg">
        <a href="https://docs.python.org/3/c-api/structures.html#c.PyVarObject" rel="noreferrer" class="gmail_msg" target="_blank">https://docs.python.org/3/c-api/structures.html#c.PyVarObject</a><br class="gmail_msg">
<br class="gmail_msg">
It returns the `ob_size` fields of a PyVarObject. I think this has to do<br class="gmail_msg">
with objects with variable sizes like lists. PyLongs are not<br class="gmail_msg">
PyVarObjects because they have no notion of length.<br class="gmail_msg">
<br class="gmail_msg">
Why would a long be stored as a sequence of digits instead of a (say) 64<br class="gmail_msg">
bit integer as 8 bytes?<br class="gmail_msg">
<br class="gmail_msg">
Cheers,<br class="gmail_msg">
Thomas<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
Python-ideas mailing list<br class="gmail_msg">
<a href="mailto:Python-ideas@python.org" class="gmail_msg" target="_blank">Python-ideas@python.org</a><br class="gmail_msg">
<a href="https://mail.python.org/mailman/listinfo/python-ideas" rel="noreferrer" class="gmail_msg" target="_blank">https://mail.python.org/mailman/listinfo/python-ideas</a><br class="gmail_msg">
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" rel="noreferrer" class="gmail_msg" target="_blank">http://python.org/psf/codeofconduct/</a><br class="gmail_msg">
</blockquote></div>