parameters: (o, handlers={}, obj_handlers={}, verbose=False)
return_statement: return sizeof(o)
docstring: Returns the approximate memory footprint an object and all of its contents.
  
      Automatically finds the contents of the following builtin containers and
      their subclasses:  tuple, list, deque, dict, set and frozenset.
      To search other containers, add handlers to iterate over their contents:
  
          handlers = {SomeContainerClass: iter,
                      OtherContainerClass: OtherContainerClass.get_elements}
docstring_summary: Returns the approximate memory footprint an object and all of its contents.
docstring_tokens: Returns the approximate memory footprint an object and all of its contents .
function: def total_size(o, handlers={}, obj_handlers={}, verbose=False):
      """ Returns the approximate memory footprint an object and all of its contents.
  
      Automatically finds the contents of the following builtin containers and
      their subclasses:  tuple, list, deque, dict, set and frozenset.
      To search other containers, add handlers to iterate over their contents:
  
          handlers = {SomeContainerClass: iter,
                      OtherContainerClass: OtherContainerClass.get_elements}
  
      """
      dict_handler = lambda d: chain.from_iterable(d.items())
      all_handlers = {tuple: iter,
                      list: iter,
                      deque: iter,
                      dict: dict_handler,
                      set: iter,
                      frozenset: iter,
                     }
      all_handlers.update(handlers)     # user handlers take precedence
      seen = set()                      # track which object id's have already been seen
      default_size = getsizeof(0)       # estimate sizeof object without __sizeof__
  
      def sizeof(o):
          if id(o) in seen:       # do not double count the same object
              return 0
          seen.add(id(o))
  
          s = 0
          for typ, handler in obj_handlers.items():
              if isinstance(o, typ):
                  s = handler(o)
                  break
          if s == 0: s = getsizeof(o, default_size)
  
          if verbose:
              print(s, type(o), repr(o), file=stderr)
  
          for typ, handler in all_handlers.items():
              if isinstance(o, typ):
                  s += sum(map(sizeof, handler(o)))
                  break
          return s
  
      return sizeof(o)
function_tokens: def total_size ( o , handlers = { } , obj_handlers = { } , verbose = False ) : dict_handler = lambda d : chain . from_iterable ( d . items ( ) ) all_handlers = { tuple : iter , list : iter , deque : iter , dict : dict_handler , set : iter , frozenset : iter , } all_handlers . update ( handlers ) # user handlers take precedence seen = set ( ) # track which object id's have already been seen default_size = getsizeof ( 0 ) # estimate sizeof object without __sizeof__ def sizeof ( o ) : if id ( o ) in seen : # do not double count the same object return 0 seen . add ( id ( o ) ) s = 0 for typ , handler in obj_handlers . items ( ) : if isinstance ( o , typ ) : s = handler ( o ) break if s == 0 : s = getsizeof ( o , default_size ) if verbose : print ( s , type ( o ) , repr ( o ) , file = stderr ) for typ , handler in all_handlers . items ( ) : if isinstance ( o , typ ) : s += sum ( map ( sizeof , handler ( o ) ) ) break return s return sizeof ( o )