Thanks Andrew for the excellent analysis quoted below. Further comments interleaved with yours. On Fri, May 08, 2020 at 05:40:31PM -0700, Andrew Barnert via Python-ideas wrote:
If someone wants this proposal, it’s because they believe it’s _not_ a misuse to use a tuple as a frozen list (or a list as a mutable tuple).
If someone doesn’t want this proposal, the most likely reason (although admittedly there are others) is because they believe it _is_ a misuse to use a tuple as a frozen list.
I don't think it is necessary to believe that it is *always* misuse, but only that it is *often* misuse and therefore `==` ought to take the conservative position and refuse to guess. I expect that nearly every Python programmer of sufficient experience has used a tuple as a de facto "frozen list" because it works and practicality beats purity. But that doesn't mean that I want my namedtuple PlayerStats(STR=10, DEX=12, INT=13, CON=9, WIS=8, CHR=12) to compare equal to my list [10, 12, 13, 9, 8, 12] by default.
It’s not always a misuse; it’s sometimes perfectly idiomatic to use a tuple as an immutable hashable sequence. It doesn’t just happen to 'work', it works, for principled reasons (tuple is a Sequence), and this is a good thing.[1]
It’s just that it’s _also_ common (probably a lot more common, but even that isn’t necessary) to use it as an anonymous struct.
So, the OP is right that (1,2,3)==[1,2,3] would sometimes be handy, the opponents are right that it would often be misleading, and the question isn’t which one is right, it’s just how often is often. And the answer is obviously: often enough that it can’t be ignored. And that’s all that matters here.
Yes, I think there's a genuine need here.
And that’s why tuple is different from frozenset. Very few uses of frozenset are as something other than a frozen set, so it’s almost never misleading that frozensets equal sets; plenty of tuples aren’t frozen lists, so it would often be misleading if tuples equaled lists.
-- Steven