code: async def container(self, container=None, container_type=None, params=None):
          
          # Container versioning is a bit tricky, primitive type containers are not versioned.
          elem_type = x.container_elem_type(container_type, params)
          raw_container = container_is_raw(container_type, params)
          elem_elementary = TypeWrapper.is_elementary_type(elem_type)
          is_versioned = not elem_elementary and not raw_container
          version = None
  
          if is_versioned:
              version = await self.version(container_type, params, elem=container)
              if self.is_tracked():
                  return self.get_tracked()
  
          if hasattr(container_type, 'boost_serialize'):
              container = container_type() if container is None else container
              self.pop_track(is_versioned)
              return await container.boost_serialize(self, elem=container, elem_type=container_type, params=params, version=version)
  
          # Container entry version + container
          if self.writing:
              self.pop_track(is_versioned)
              return await self.container_dump(container, container_type, params)
          else:
              obj = await self.container_load(container_type, params=params, container=container)
              return self.track_obj(obj, is_versioned)
docs: Loads/dumps container
          :return: