On Mon, Nov 28, 2022 at 5:38 PM Steven D'Aprano <st...@pearwood.info> wrote:

> On Mon, Nov 28, 2022 at 11:13:34PM +0000, Oscar Benjamin wrote:
> > On Mon, 28 Nov 2022 at 22:56, Brett Cannon <br...@python.org> wrote:
>
> > > That's actually by design. Sets are not meant to be deterministic
> > > conceptually as they are essentially a bag of stuff. If you want
> > > deterministic ordering you should convert it to a list and sort the
> > > list.
> >
> > What does "sets are not meant to be deterministic" even mean?
>
> I'm not Brett, so I'm not answering for him, but many people (sometimes
> including me) misuse "not deterministic" to refer to set order and the
> old dict order.


Yep, that's what I mean. And my comment about dicts earlier is old
knowledge from before we made dict iteration deterministic based on
insertion order since I'm been doing this for too long. 😉

-Brett


> Of course set order is deterministic, it is determined
> by the combination of the set implementation, the hashing algorithm, and
> the history of the set -- all the items that have ever appeared in the
> set (both those removed and those that remain).
>
> Set order is deterministic in the same way that roulette wheels are
> deterministic.
>
> We don't have a good term for this: the items don't appear in random
> order. But it is not predictable either, except in very special cases.
> "Arbitrary" is not right either, since that implies we can easily choose
> whatever set order we want.
>
> I think that physicists call this "deterministic chaos"
>
>
> https://www.quora.com/Theoretical-Physics-What-is-deterministic-but-unpredictable
>
> (sorry for the quora link) so I guess we might say that set iteration
> order is "deterministically chaotic" if you want to be precise, but life
> is too short for that level of pedantry (and that's coming from me, a
> Grade A Pedant *wink*) so people often describe it as random, arbitrary,
> or non-deterministic when it's none of those things :-).
>
> Maybe we could call set order "pseudo-random".
>
> Getting back to the design part, I think that what Brett is trying to
> get across is not that the chaotic set order is in and of itself a
> requirement, but that given the other requirements, chaotic set order is
> currently considered a necessary condition.
>
> As I understand it, we could make sets ordered, but only at the cost of
> space (much more memory) or time (slower) or both.
>
> I am sure that Guido is correct that **if** somebody comes up with a
> fast, efficient ordered set implementation that doesn't perform worse
> than the current implementation, we will happily swap to giving sets a
> predictable order, as we did with dicts. (Practicality beats purity --
> even if sets are *philosophically* unordered, preserving input order is
> too useful to give up unless we gain something in return.)
>
> But I don't think it is fair or kind to call Brett's argument FUD. At
> the very least it is uncharitable interpretation of Brett's position.
>
> > It would be useful to have a straight-forward way to sort a set into a
> > deterministic ordering but no such feature exists after the Py3K
> > changes (sorted used to do this in Python 2.x).
>
> `sorted()` works fine on homogeneous sets. It is only heterogeneous sets
> that are a problem, and in practice, that usually means None mixed in
> with some other type.
>
>
> --
> Steve
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/UAVNSMS3XFAQQ6ZRD27IXPTWZFCHP6M4/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/ZUACMM6HDUOG4VIAPAK7W5Q6WQRRLI2U/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to