I would be very happy to see a frozendict in collections :) Just for curiosity ; apart caching, is there any optimization that can be done on a frozendict implementation (over dict) ?
I wonder if frozendict would be implemented as dict without modification methods, or as a particular object that by design does not easily allow modifications. On 28/02/2017 21:05, Matt Gilson wrote: > I've implemented `frozendict` a few times for various projects and never > knew about MappingProxyType. I always used `collections.abc.Mapping` ... > > > On Tue, Feb 28, 2017 at 9:12 AM, David Mertz <[email protected]> wrote: > >> The difference in hits might be because MappingProxyType has a funny name >> and is in a hidden-ish location. I.e. not necessarily because it *would >> be* less used or useful if it were more exposed. >> >> > It also might be because you can use `frozenset` in python2.x code -- And > there's lots of that lying around... > > >> In either case, the name that makes sense to me would be `frozendict`. >> That could very well live in `collections` of course. >> > > Yes, I agree. Though it'd also probably need to be hashable if we were to > give it that name. I'm not 100% sure that `MappingProxyType` works there > as it's just a view into another mapping. If the first mapping changes, so > does the hash. This is the same problem we have hashing tuple in some > sense -- But tuple can say "Nope, sorry. I can't hash this because it's > got an unhashable member". I don't think we can really do the same thing > with a MappingProxy since most of the time, it'll be constructed from > something else. I suppose the workaround is pretty simple though: > > class frozendict(MappingProxyType): > def __init__(self, proxy): > super().__init__(proxy.copy()) # Copy the proxy! -- Maybe need > `copy.copy()` instead? > def __hash__(self): > return hash(frozenset(self.items())) > > This could likely be done better, but hopefully it gets the idea across... > > >> >> On Tue, Feb 28, 2017 at 7:40 AM, Ivan Levkivskyi <[email protected]> >> wrote: >> >>> Searching MappingProxyType on GitHub gives over 10,000 results. >>> I think it probably makes sense to make mappingproxy more "visible", >>> maybe move it to collections module? (where OrderedDict lives) >>> >>> I am not sure if it makes sense to move it to builtins. (for comparison >>> frozenset gives around 1000,000 results) >>> >>> -- >>> Ivan >>> >>> >>> >>> On 28 February 2017 at 16:24, Joseph Hackman <[email protected]> >>> wrote: >>> >>>> +1 >>>> >>>> I think this makes a lot of sense. What would you name the built in? >>>> >>>> -Joseph >>>> >>>>> On Feb 28, 2017, at 7:17 AM, Michel Desmoulin < >>>> [email protected]> wrote: >>>>> >>>>> We have the immutable frozenset for sets and and tuples for lists. >>>>> >>>>> But we also have something to manipulate dict as immutable >>>> datastructures: >>>>> >>>>>>>> from types import MappingProxyType as idict >>>>>>>> d = idict({'a':1, 'b':2, 'c':3}) >>>>>>>> d['a'] = 4 >>>>> Traceback (most recent call last): >>>>> File "<ipython-input-3-c6f93d6278af>", line 1, in <module> >>>>> d['a'] = 4 >>>>> TypeError: 'mappingproxy' object does not support item assignment >>>>> >>>>> We could expose this as a built type to allow the last of the most >>>>> important data structure in Python to be easily immutable. >>>>> >>>>> _______________________________________________ >>>>> Python-ideas mailing list >>>>> [email protected] >>>>> https://mail.python.org/mailman/listinfo/python-ideas >>>>> Code of Conduct: http://python.org/psf/codeofconduct/ >>>> _______________________________________________ >>>> Python-ideas mailing list >>>> [email protected] >>>> https://mail.python.org/mailman/listinfo/python-ideas >>>> Code of Conduct: http://python.org/psf/codeofconduct/ >>>> >>> >>> >>> _______________________________________________ >>> Python-ideas mailing list >>> [email protected] >>> https://mail.python.org/mailman/listinfo/python-ideas >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >> >> >> >> -- >> Keeping medicines from the bloodstreams of the sick; food >> from the bellies of the hungry; books from the hands of the >> uneducated; technology from the underdeveloped; and putting >> advocates of freedom in prisons. Intellectual property is >> to the 21st century what the slave trade was to the 16th. >> >> _______________________________________________ >> Python-ideas mailing list >> [email protected] >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > > > > > > _______________________________________________ > Python-ideas mailing list > [email protected] > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Python-ideas mailing list [email protected] https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
