Copies fields from ``obj`` to ``target``.  If a matched field does
        not exist in ``obj``, it will be deleted from ``target``, otherwise it
        will be assigned (or copied).

        args:

            ``target=``\ *OBJECT*
                the object to set the fields in

            ``source=``\ *OBJECT*
                the object to lift the fields from

            ``copy=``\ *BOOL*\ \|\ *FUNCTION*
                deep copy the values set, using copy.deepcopy (or the passed
                function).  False by default.

def patch(self, target, source, copy=False):
        """Copies fields from ``obj`` to ``target``.  If a matched field does
        not exist in ``obj``, it will be deleted from ``target``, otherwise it
        will be assigned (or copied).

        args:

            ``target=``\ *OBJECT*
                the object to set the fields in

            ``source=``\ *OBJECT*
                the object to lift the fields from

            ``copy=``\ *BOOL*\ \|\ *FUNCTION*
                deep copy the values set, using copy.deepcopy (or the passed
                function).  False by default.
        """
        # TODO: this could also be a whole lot more efficient!
        fs_val = []
        for fs in self:
            try:
                fs_val.append((fs, fs.get(source)))
            except AttributeError:
                fs_val.append((fs, _None))
            except FieldSelectorException:
                raise

        if copy and not callable(copy):
            copy = deepcopy

        for fs, val in fs_val:
            if val is _None:
                fs.delete(target)
            else:
                fs.post(target, val if not copy else copy(val))