> One way to think about is that adding indexing to the views would NOT
make them Sequences, it would simply provide that one feature

As you can see in an e-mail from me in another thread yesterday - `__eq__`,
oddly enough, is not currently a Sequence method,
if we take Sequences to be what is collections.abc.Sequence interface.
(In that thread e-mail I am actually querying if there would be no
drawbacks in doing that, though)

On Tue, 30 Jun 2020 at 15:10, Christopher Barker <python...@gmail.com>
wrote:

> On Tue, Jun 30, 2020 at 5:35 AM Steven D'Aprano <st...@pearwood.info>
> wrote:
>
>> On Mon, Jun 29, 2020 at 11:02:54PM -0700, Christopher Barker wrote:
>>
>
>
>> > Or is it a set because it can’t be indexed? If I have the history right,
>> > dict.items was first implemented with the “old” dict implementation,
>> which
>> > did not preserve order, but did provide O(1) access, so making the dict
>> > views set-like was easy, and making them Sequences was impossible.
>>
>> No, making them set-like was intentional.
>>
>> The history goes something like this:
>>
>> In Python 1, and early Python 2, dict.keys(), .values() and .items()
>> each returned lists. Some time by 2.4 (possibly earlier) dicts grew
>> additional methods returning iterators:
>>
>>     dict.iterkeys() .itervalues() .iteritems()
>>
>> As part of the migration from Python 2 to 3, it was planned to change
>> them to set-like views:
>>
>> https://www.python.org/dev/peps/pep-3106/
>>
>> so as an aid to migration, these set-like views were added to 2.7:
>>
>>     dict.viewkeys() .viewvalues() .viewitems()
>>
>> and finally in 3.x, the list and iterator versions were all dropped and
>> the views were renamed.
>>
>> So there was already a sequence version of items etc, and the set-like
>> views were explicitly intended to be set-like.
>>
>
> Thanks for the details, but I just re-read the PEP, and I'm not sure my
> hand wavy version is wrong:
>
> > there was already a sequence version of items etc
>
> Well, yes, but they explicitly created list copies -- there was no
> sequence-like version that was a view.
>
> The first improvement on that was the iter* methods, and then (inspired by
> JAVA) it was determined that we could have view objects that could provide
> efficient iterators, and also set-like behavior. But I don't see any
> comments in the PEP about why indexing was rejected, but it's implicit in
> the fact that dicts were explicitly unordered at the time that PEP was
> written.
>
> Now that dicts do preserve order, and there is an implementation that can
> provide somewhat efficient indexing ( not O(1), but yes O(N) with a small
> constant) there is the opportunity to add a new feature.
>
> It does bring up a question: if the view objects support indexing, it
> would be a bit odd for two dict view objects to be equal if they have the
> same elements, but not the same order, but that would be required to remain
> consistent with the way dicts currently are (and will remain) One way to
> think about is that adding indexing to the views would NOT make them
> Sequences, it would simply provide that one feature.
>
> So how useful is that feature? I recall a couple (actually, essentailly
> one) which is selecting an arbitrary or random item from a dict, i.e. being
> able to pass a dict view to random.choice()
>
> As it happens. I've had that use case, but if that's the only one folks
> can think of, then maybe not particularly worthwhile.
>
> Final note about performance: yes, we don't want to encourage folks to use
> not-great-performance approaches, but the alternative to the O(N) with
> small constant performance being proposed here is to make a Sequence out of
> the views, and then index into them, which is O(N) with a larger constant
> and more memory use.
>
> -CHB
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>>
>> --
>> Steven
>> _______________________________________________
>> Python-ideas mailing list -- python-ideas@python.org
>> To unsubscribe send an email to python-ideas-le...@python.org
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-ideas@python.org/message/XT4T7OIEAY7YQZR6K2ODOQZRXT24YIXY/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
>
> --
> Christopher Barker, PhD
>
> Python Language Consulting
>   - Teaching
>   - Scientific Software Development
>   - Desktop GUI and Web Development
>   - wxPython, numpy, scipy, Cython
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/KHXGUVNGQY6RJSDWKFXBK4G5UQAJ75U7/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/Y6OBFMNETU7TB6EYFAUR2A6AYY574FIP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to