code: def mutant(fn):
      
      @wraps(fn)
      def inner_f(*args, **kwargs):
          return freeze(fn(*[freeze(e) for e in args], **dict(freeze(item) for item in kwargs.items())))
  
      return inner_f
docs: Convenience decorator to isolate mutation to within the decorated function (with respect
      to the input arguments).
  
      All arguments to the decorated function will be frozen so that they are guaranteed not to change.
      The return value is also frozen.