| 0 | 1 class defaultdict(dict): | 
|  | 2     """Back compatible defaultdict: http://code.activestate.com/recipes/523034/ | 
|  | 3     """ | 
|  | 4     def __init__(self, default_factory=None, *a, **kw): | 
|  | 5         if (default_factory is not None and | 
|  | 6             not hasattr(default_factory, '__call__')): | 
|  | 7             raise TypeError('first argument must be callable') | 
|  | 8         dict.__init__(self, *a, **kw) | 
|  | 9         self.default_factory = default_factory | 
|  | 10     def __getitem__(self, key): | 
|  | 11         try: | 
|  | 12             return dict.__getitem__(self, key) | 
|  | 13         except KeyError: | 
|  | 14             return self.__missing__(key) | 
|  | 15     def __missing__(self, key): | 
|  | 16         if self.default_factory is None: | 
|  | 17             raise KeyError(key) | 
|  | 18         self[key] = value = self.default_factory() | 
|  | 19         return value | 
|  | 20     def __reduce__(self): | 
|  | 21         if self.default_factory is None: | 
|  | 22             args = tuple() | 
|  | 23         else: | 
|  | 24             args = self.default_factory, | 
|  | 25         return type(self), args, None, None, self.items() | 
|  | 26     def copy(self): | 
|  | 27         return self.__copy__() | 
|  | 28     def __copy__(self): | 
|  | 29         return type(self)(self.default_factory, self) | 
|  | 30     def __deepcopy__(self, memo): | 
|  | 31         import copy | 
|  | 32         return type(self)(self.default_factory, | 
|  | 33                           copy.deepcopy(self.items())) | 
|  | 34     def __repr__(self): | 
|  | 35         return 'defaultdict(%s, %s)' % (self.default_factory, | 
|  | 36                                         dict.__repr__(self)) | 
|  | 37 |