[Python-ideas] Py_SIZE of PyLongs

Elliot Gorokhovsky elliot.gorokhovsky at gmail.com
Wed Oct 19 22:46:18 EDT 2016


It's in the code. See longobject.c:

Py_SIZE(v) = ndigits*sign;

You can also see Py_SIZE(v) used on PyLongs all over the place in
longobject.c, for example:

    v = (PyLongObject *)vv;
    i = Py_SIZE(v);

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.


On Wed, Oct 19, 2016 at 7:24 PM Thomas Nyberg <tomuxiong at gmx.com> wrote:

> On 10/19/2016 09:04 PM, Elliot Gorokhovsky wrote:
> > A quick note:
> >
> > I'm working on a special-case compare function for bounded integers for
> > the sort stuff. By looking at the implementation, I figured out that
> > Py_SIZE of a long is the sign times the number of digits (...right?).
> > Before looking at the implementation, though, I had looked for this info
> > in the docs, and I couldn't find it anywhere. Since Py_SIZE is public, I
> > think the documentation should make clear what it returns for PyLongs,
> > for example somewhere on the "Integer Objects" page. Apologies if this
> > is specified somewhere else in the docs and I just couldn't find it.
> >
> > Elliot
>
> I don't think this is right.
>
>
> https://github.com/python/cpython/blob/master/Include/object.h#L119
>         https://docs.python.org/3/c-api/structures.html#c.Py_SIZE
>         https://docs.python.org/3/c-api/structures.html#c.PyVarObject
>
> It returns the `ob_size` fields of a PyVarObject. I think this has to do
> with objects with variable sizes like lists. PyLongs are not
> PyVarObjects because they have no notion of length.
>
> Why would a long be stored as a sequence of digits instead of a (say) 64
> bit integer as 8 bytes?
>
> Cheers,
> Thomas
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20161020/38e3d991/attachment.html>


More information about the Python-ideas mailing list