code: def prepare_lazy_data(content, functions_mapping=None, check_variables_set=None, cached=False):
      
      # TODO: refactor type check
      if content is None or isinstance(content, (numeric_types, bool, type)):
          return content
  
      elif isinstance(content, (list, set, tuple)):
          return [
              prepare_lazy_data(
                  item,
                  functions_mapping,
                  check_variables_set,
                  cached
              )
              for item in content
          ]
  
      elif isinstance(content, dict):
          parsed_content = {}
          for key, value in content.items():
              parsed_key = prepare_lazy_data(
                  key,
                  functions_mapping,
                  check_variables_set,
                  cached
              )
              parsed_value = prepare_lazy_data(
                  value,
                  functions_mapping,
                  check_variables_set,
                  cached
              )
              parsed_content[parsed_key] = parsed_value
  
          return parsed_content
  
      elif isinstance(content, basestring):
          # content is in string format here
          if not is_var_or_func_exist(content):
              # content is neither variable nor function
              # replace $$ notation with $ and consider it as normal char.
              # e.g. abc => abc, abc$$def => abc$def, abc$$$$def$$h => abc$$def$h
              return content.replace("$$", "$")
  
          functions_mapping = functions_mapping or {}
          check_variables_set = check_variables_set or set()
          content = content.strip()
          content = LazyString(content, functions_mapping, check_variables_set, cached)
  
      return content
docs: make string in content as lazy object with functions_mapping
  
      Raises:
          exceptions.VariableNotFound: if any variable undefined in check_variables_set