<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_from_obj(self, obj, copy=False):
 """ Updates this configuration object from another. See :meth:`ConfigurationObject.update` for details. :param obj: Values to update the ConfigurationObject with. :type obj: ConfigurationObject :param copy: Copies lists and dictionaries. :type copy: bool """

        obj.clean()
        obj_config = obj._config
        all_props = self.__class__.CONFIG_PROPERTIES
        if copy:
            for key, value in six.iteritems(obj_config):
                attr_config = all_props.get(key)
                if attr_config:
                    attr_type = attr_config.attr_type
                    if attr_type:
                        if issubclass(attr_type, list):
                            self._config[key] = value[:]
                        elif attr_type is dict:
                            self._config[key] = value.copy()
                    else:
                        self._config[key] = value
                    self._modified.discard(key)
        else:
            filtered_dict = {key: value
                             for key, value in six.iteritems(obj_config)
                             if key in all_props}
            self._config.update(filtered_dict)
            self._modified.difference_update(filtered_dict.keys())