[Python-Dev] builtin_id() returns negative numbers

Josiah Carlson jcarlson at uci.edu
Mon Feb 14 18:29:57 CET 2005

James Y Knight <foom at fuhm.net> wrote:
> On Feb 14, 2005, at 10:41 AM, Tim Peters wrote:
> >> Wouldn't it be more elegant to make builtin_id() return an unsigned
> >> long integer?
> >
> > I think so.  This is the function ZODB 3.3 uses, BTW:
> >
> > def positive_id(obj):
> >     """Return id(obj) as a non-negative integer."""
> >  [...]
> I think it'd be nice to change it, too. Twisted also uses a similar 
> function.
> However, last time this topic came up, this Tim Peters guy argued 
> against it. ;)
> Quoting 
> http://mail.python.org/pipermail/python-dev/2004-November/050049.html:
> > Python doesn't promise to return a postive integer for id(), although
> > it may have been nicer if it did.  It's dangerous to change that now,
> > because some code does depend on the "32 bit-ness as a signed integer"
> > accident of CPython's id() implementation on 32-bit machines.  For
> > example, code using struct.pack(), or code using one of ZODB's
> > specialized int-key BTree types with id's as keys.

All Tim was saying is that you can't /change/ builtin_id() because of
backwards compatibiliity with Zope and struct.pack().  You are free to
create a positive_id() function, and request its inclusion into builtins
(low probability; people don't like doing that). Heck, you are even free
to drop it in your local site.py implementation.  But changing the
current function is probably a no-no.

 - Josiah

More information about the Python-Dev mailing list