from jaraco collections 3 3 often it is desirable to prevent the mutation of a default dict after its initial construction such as to prevent mutation during iteration dd freezabledefaultdictlist dd0 append 1 dd freeze dd1 lendd 1 from jaraco collections 3 3 often it is desirable to prevent the mutation of a default dict after its initial construction such as to prevent mutation during iteration dd freezabledefaultdict list dd 0 append 1 dd freeze dd 1 len dd 1
import collections


class FreezableDefaultDict(collections.defaultdict):
    

    def __missing__(self, key):
        return getattr(self, '_frozen', super().__missing__)(key)

    def freeze(self):
        self._frozen = lambda key: self.default_factory()


class Pair(collections.namedtuple('Pair', 'name value')):
    @classmethod
    def parse(cls, text):
        return cls(*map(str.strip, text.split("=", 1)))