[Python-Dev] ctypes: is it intentional that id() is the only way to get the address of an object?
MRAB
python at mrabarnett.plus.com
Fri Jan 18 20:59:20 EST 2019
On 2019-01-19 00:28, Greg Ewing wrote:
> Tim Peters wrote:
>
>> The dict itself keeps the objects alive.
>
> Yes, but the idea of a cache is that you're free to flush
> things out of it to make room for something else without
> breaking anything.
>
> It sounds like MRAB is using ids as weak references,
> without the assurance actual weak references give you
> that they become invalidated when the refefenced object
> goes away,
>
"Cache" was the wrong word for what it does. I'm not using the id as a
weak reference.
Sometimes I might want to store a collection of objects and their order
isn't important. I can add an object to the collection, or remove an
object from it.
If I used a list, adding would be quick, but removing would require
searching the list.
By putting them in a dict, keyed by the id, I can remove an object in O(1).
Trust me, I'm not doing anything that's unreliable! (And I _have_ done
programming in C with the Python API, so I know all about refcounts...) :-)
>> No such uses care about object addresses, though - just that id(obj)
>> returns a value usable as a dict key, unique among all reachable
>> objects at the time `id()` is called.
>
> Yep. In hindsight it was probably a mistake for the docs
> to talk about addresses in relation to id() -- it seems to
> have given some people unrealistic expectations.
>
More information about the Python-Dev
mailing list