def merge(self, values, lists_only=False):
        """
        Merges list-based attributes into one list including unique elements from both lists. When ``lists_only`` is
        set to ``False``, updates dictionaries and overwrites single-value attributes. The resulting configuration
        is 'clean', i.e. input values converted and validated. If the conversion is not possible, a ``ValueError`` is
        raised.

        :param values: Values to update the ConfigurationObject with.
        :type values: dict | ConfigurationObject
        :param lists_only: Ignore single-value attributes and update dictionary options.
        :type lists_only: bool
        """
        if isinstance(values, self.__class__):
            self.merge_from_obj(values, lists_only=lists_only)
        elif isinstance(values, dict):
            self.merge_from_dict(values, lists_only=lists_only)
        else:
            raise ValueError("{0} or dictionary expected; found '{1}'.".format(self.__class__.__name__,
                                                                               type(values).__name__))
Merges list-based attributes into one list including unique elements from both lists. When ``lists_only`` is
        set to ``False``, updates dictionaries and overwrites single-value attributes. The resulting configuration
        is 'clean', i.e. input values converted and validated. If the conversion is not possible, a ``ValueError`` is
        raised.

        :param values: Values to update the ConfigurationObject with.
        :type values: dict | ConfigurationObject
        :param lists_only: Ignore single-value attributes and update dictionary options.
        :type lists_only: bool