def destroy(self):
        """
        Fully delete this element and release the memory
        """
        super(BaseObject, self).destroy()
        try:
            from metadrive.engine.engine_utils import get_engine
        except ImportError:
            pass
        else:
            engine = get_engine()
            if engine is not None:
                if self.is_attached():
                    self.detach_from_world(engine.physics_world)
                if self._body is not None and hasattr(self.body, "object"):
                    self.body.generated_object = None
                if self.origin is not None:
                    self.origin.removeNode()

                self.dynamic_nodes.destroy_node_list()
                self.static_nodes.destroy_node_list()

            clear_node_list(self._node_path_list)

            logger.debug("Finish cleaning {} node path for {}.".format(len(self._node_path_list), self.class_name))
            self._node_path_list.clear()
            self._node_path_list = []

            self.dynamic_nodes.clear()
            self.static_nodes.clear()

        Fully delete this element and release the memory
        
metadrive/base_class/base_object.py