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. >
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4