code: def gen_elem_array(size, elem_type=None):
      
      if elem_type is None or not callable(elem_type):
          return [elem_type] * size
      if is_type(elem_type, ContainerType):
  
          def elem_type():
              return []
  
      res = []
      for _ in range(size):
          res.append(elem_type())
      return res
docs: Generates element array of given size and initializes with given type.
      Supports container type, used for pre-allocation before deserialization.
      :param size:
      :param elem_type:
      :return: