def copy(self, **kwargs):
        """
        :param kwargs:
        :return: copy of this object modifying the kwargs
        """
        for k in kwargs:
            assert k in self._keys, 'Invalid key: %s' % k

        d = self.values()
        d.update(kwargs)
        return self.__class__(**d)