def clone(self):
        """Returns a deep copy of self

        Function clones:
        
        * allocation
        * nodes
        
        Returns
        -------
        type
            Deep copy of self
        """

        new_route = self.__class__(self._problem)
        for node in self.nodes():
            # Insere new node on new route
            new_node = node.__class__(node._name, node._demand)
            new_route.allocate([new_node])

        return new_route