Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #28376
| Newsgroups | comp.lang.python |
|---|---|
| Date | 2012-09-03 17:24 -0700 |
| References | (11 earlier) <mailman.3883.1346095064.4697.python-list@python.org> <1567e8c7-a2bb-41f4-9be8-18e9f4d063cb@googlegroups.com> <mailman.154.1346700607.27098.python-list@python.org> <ed8c3b7a-f9ff-45fe-9e2c-a225764da7ae@googlegroups.com> <mailman.156.1346704107.27098.python-list@python.org> |
| Subject | Re: set and dict iteration |
| From | Aaron Brady <castironpi@gmail.com> |
| Message-ID | <mailman.160.1346718245.27098.python-list@python.org> (permalink) |
On Monday, September 3, 2012 3:28:28 PM UTC-5, Dave Angel wrote: > On 09/03/2012 04:04 PM, Aaron Brady wrote: > > > On Monday, September 3, 2012 2:30:24 PM UTC-5, Ian wrote: > > >> On Sun, Sep 2, 2012 at 11:43 AM, Aaron Brady <castironpi@gmail.com> wrote: > > >> > > >>> We could use a Python long object for the version index to prevent overflow. Combined with P. Rubin's idea to count the number of open iterators, most use cases still wouldn't exceed a single word comparison; we could reset the counter when there weren't any. > > >> > > >> > > >> We could use a Python long; I just don't think the extra overhead is > > >> > > >> justified in a data structure that is already highly optimized for > > >> > > >> speed. Incrementing and testing a C int is *much* faster than doing > > >> > > >> the same with a Python long. > > > I think the technique would require two python longs and a bool in the set, and a python long in the iterator. > > > > > > One long counts the number of existing (open) iterators. Another counts the version. The bool keeps track of whether an iterator has been created since the last modification, in which case the next modification requires incrementing the version and resetting the flag. > > > > I think you're over-engineering the problem. it's a bug if an iterator > > is used after some change is made to the set it's iterating over. We > > don't need to catch every possible instance of the bug, that's what > > testing is for. The point is to "probably" detect it, and for that, all > > we need is a counter in the set and a counter in the open iterator. > > Whenever changing the set, increment its count. And whenever iterating, > > check the two counters. if they don't agree, throw an exception, and > > destroy the iterator. i suppose that could be done with a flag, but it > > could just as easily be done by zeroing the pointer to the set. > > > > I'd figure a byte or two would be good enough for the counts, but a C > > uint would be somewhat faster, and wouldn't wrap as quickly. > > > > -- > > > > DaveA Hi D. Angel, The serial index constantly reminds me of upper limits. I have the same problem with PHP arrays, though it's not a problem with the language itself. The linked list doesn't have a counter, it invalidates iterators when a modification is made, therefore it's the "correct" structure in my interpretation. But it does seem more precarious comparatively, IMHO. Both strategies solve the problem I posed originally, they both involve trade-offs, and it's too late to include either in 3.3.0.
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: set and dict iteration Ian Kelly <ian.g.kelly@gmail.com> - 2012-08-27 13:17 -0600
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-02 10:43 -0700
Re: set and dict iteration Ian Kelly <ian.g.kelly@gmail.com> - 2012-09-03 13:29 -0600
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-03 13:04 -0700
Re: set and dict iteration Dave Angel <d@davea.name> - 2012-09-03 16:27 -0400
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-03 17:24 -0700
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-03 17:24 -0700
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-03 13:04 -0700
Re: set and dict iteration Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-09-04 01:26 +0000
Re: set and dict iteration Dave Angel <d@davea.name> - 2012-09-03 21:50 -0400
Re: set and dict iteration Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2012-09-04 01:59 +0000
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-08 08:42 -0700
Re: set and dict iteration Aaron Brady <castironpi@gmail.com> - 2012-09-02 10:43 -0700
csiph-web