On 07/25/2013 06:54 PM, eryksun wrote:
On Thu, Jul 25, 2013 at 6:37 PM, Dave Angel <da...@davea.name> wrote:
For dictionaries, instead of returning a list, keys() returns a dictionary
view. See http://docs.python.org/3/library/stdtypes.html#dict-views
What's not clear to me is whether this dictionary view object is safe to use
when the dictionary is changing. The page referenced above seems to say
both yes and no.
The view isn't an iterator. A separate iterator gets created for that:
>>> d = {'a': 1}
>>> keys = d.keys()
>>> it = iter(keys)
>>> d['b'] = 2 # invalidate "it"
>>> list(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
This creates and iterates a new dict_keyiterator:
>>> list(keys)
['b', 'a']
OK, so the view is apparently an iterable.
And it's apparently safe to change the dictionary after creating the
view, UNTIL the iterator is created. And perhaps the dictionary isn't
actually traversed till the iterator is created.
I still don't see the advantage. Isn't the iterator going to be as big
as the list would have been, and take just as long to build?
--
DaveA
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor