On Thu, Jan 5, 2017 at 9:10 PM Stephen J. Turnbull < turnbull.stephen...@u.tsukuba.ac.jp> wrote:
> Paul Moore writes: > > > The debate here regarding tuple/frozenset indicates that there may not > > be a "standard way" of hashing an iterable (should order matter?). > > If part of the data structure, yes, if an implementation accident, no. > > > Although I agree that assuming order matters is a reasonable > > assumption to make in the absence of any better information. > > I don't think so. Eg, with dicts now ordered by insertion, an > order-dependent default hash for collections means > > a = {} > b = {} > a['1'] = 1 > a['2'] = 2 > b['2'] = 2 > b['1'] = 1 > hash(a) != hash(b) # modulo usual probability of collision > > (and modulo normally not hashing mutables). For the same reason I > expect I'd disagree with Neil's proposal for an ImmutableWhatever > default __hash__ although the hash comparison is "cheap", it's still a > pessimization. Haven't thought that through, though. > I don't understand this? How is providing a default method in an abstract base class a pessimization? If it happens to be slower than the code in the current methods, it can still be overridden. > > BTW, it occurs to me that now that dictionaries are versioned, in some > cases it *may* make sense to hash dictionaries even though they are > mutable, although the "hash" would need to somehow account for the > version changing. Seems messy but maybe someone has an idea? > I think it's important to keep in mind that dictionaries are not versioned in Python. They happen to be versioned in CPython as an unexposed implementation detail. I don't think that such details should have any bearing on potential changes to Python. > Steve >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/