On Wed, Oct 14, 2009 at 1:37 PM, Laszlo Nagy <gand...@shopzeus.com> wrote: > > Andre Engels schrieb: >> >>> >>> None, True, False, NotImplemented are guaranteed to be singletons, all >> builtin types and exceptions can be considered as singletons, too. >> >> > I thought that different mutable objects always have different ids. If this > is not true, then what the id() function is used for? What useful thing can > we do with it? >
They do. None, True, False, integers and strings are not mutable. The only time the id is the "same" between two objects is if they are the identical two objects. CPython just (as a performance optimization) re-uses the same objects sometimes even if people think they're using different objects. In, >>> a = 2 >>> b = 2 The id is the same, as they're the same integer object. Its not two separate integer objects. Their ID will be the same, as they're precisely the same object. But, >>> a = 1e100 >>> b = 1e100 Those are two separate objects, because Python's not re-using an existing object the second time it sees 1e100. Christian's point is, I believe, that this is all an implementation detail to the CPython platform and not a language-defined feature. Other implementations may do other things, so one should not rely on this behavior. Basically, don't use "is" unless you really know what you're doing -- or are testing verses a singleton :) "is" is never the right thing for numbers. Usually. Ahem. --S
-- http://mail.python.org/mailman/listinfo/python-list