[Python-Dev] Another case for frozendict
dw+python-dev at hmmz.org
dw+python-dev at hmmz.org
Sun Jul 13 20:43:28 CEST 2014
On Sun, Jul 13, 2014 at 02:04:17PM +0000, Jason R. Coombs wrote:
> PEP-416 mentions a MappingProxyType, but that’s no help.
Well, it kindof is. By combining MappingProxyType and UserDict the
desired effect can be achieved concisely:
import collections
import types
class frozendict(collections.UserDict):
def __init__(self, d, **kw):
if d:
d = d.copy()
d.update(kw)
else:
d = kw
self.data = types.MappingProxyType(d)
_h = None
def __hash__(self):
if self._h is None:
self._h = sum(map(hash, self.data.items()))
return self._h
def __repr__(self):
return repr(dict(self))
> Although hashability is mentioned in the PEP under constraints, there are many
> use-cases that fall out of the ability to hash a dict, such as the one
> described above, which are not mentioned at all in use-cases for the PEP.
> If there’s ever any interest in reviving that PEP, I’m in favor of its
> implementation.
In its previous form, the PEP seemed more focused on some false
optimization capabilities of a read-only type, rather than as here, the
far more interesting hashability properties. It might warrant a fresh
PEP to more thoroughly investigate this angle.
David
More information about the Python-Dev
mailing list