                      objects = self.object
                      identities = [self.get_identity(self.to_native(obj)) for obj in objects]
                      identity_to_objects = dict(zip(identities, objects))
  
                  try:
                      iter(data)
                      if isinstance(data, dict):
                          raise TypeError
                  except TypeError:
                      self._errors = {'non_field_errors': ['Expected a list of items']}
                  else:
                      for item in data:
                          if update:
                              # Determine which object we're updating
                              try:
                                  identity = self.get_identity(item)
 
</s> remove                             try:
                                identity = self.get_identity(item)
                            except:
                                self.object = None
                            else:
                                self.object = identity_to_objects.pop(identity, None)
 </s> add                             identity = self.get_identity(item)
                            self.object = identity_to_objects.pop(identity, None) </s> remove         if self._deleted:
 </s> add         if self.allow_delete and self._deleted:
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                      objects = self.object
                      identities = [self.get_identity(self.to_native(obj)) for obj in objects]
                      identity_to_objects = dict(zip(identities, objects))
  
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                if hasattr(data, '__iter__') and not isinstance(data, (dict, six.text_type)):
                      for item in data:
                          if update:
                              # Determine which object we're updating
                              try:
                                  identity = self.get_identity(item)
keep keep keep keep replace replace replace replace replace replace replace keep keep keep keep keep
 Bit of extra tidying and plenty of docs 
rest_framework/serializers.py