[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