              cutoff_text=self.html_cutoff_text
          )
  
  
  class MultipleChoiceField(ChoiceField):
      default_error_messages = {
          'invalid_choice': _('"{input}" is not a valid choice.'),
          'not_a_list': _('Expected a list of items but got type "{input_type}".'),
          'empty': _('This selection may not be empty.')
 
</s> remove         self.grouped_choices = to_choices_dict(choices)
        self.choices = flatten_choices_dict(self.grouped_choices)
 </s> add         self.choices = choices </s> remove         # Map the string representation of choices to the underlying value.
        # Allows us to deal with eg. integer choices while supporting either
        # integer or string input, but still get the correct datatype out.
        self.choice_strings_to_values = {
            six.text_type(key): key for key in self.choices.keys()
        }

 </s> add 
    def _get_choices(self):
        return self._choices

    def _set_choices(self, choices):
        self.grouped_choices = to_choices_dict(choices)
        self._choices = flatten_choices_dict(self.grouped_choices)

        # Map the string representation of choices to the underlying value.
        # Allows us to deal with eg. integer choices while supporting either
        # integer or string input, but still get the correct datatype out.
        self.choice_strings_to_values = {
            six.text_type(key): key for key in self.choices.keys()
        }

    choices = property(_get_choices, _set_choices)

              cutoff_text=self.html_cutoff_text
          )
  
    def _get_choices(self):
        return self._choices

    def _set_choices(self, choices):
        self.grouped_choices = to_choices_dict(choices)
        self._choices = flatten_choices_dict(self.grouped_choices)

        # Map the string representation of choices to the underlying value.
        # Allows us to deal with eg. integer choices while supporting either
        # integer or string input, but still get the correct datatype out.
        self.choice_strings_to_values = {
            six.text_type(key): key for key in self.choices.keys()
        }

    choices = property(_get_choices, _set_choices)

  
  class MultipleChoiceField(ChoiceField):
      default_error_messages = {
          'invalid_choice': _('"{input}" is not a valid choice.'),
          'not_a_list': _('Expected a list of items but got type "{input_type}".'),
          'empty': _('This selection may not be empty.')
keep keep add keep keep keep keep keep keep
 Allow `ChoiceField.choices` to be set dynamically (#5426)

## Description

The `choices` field for the `ChoiceField` class should be able to be edited after `ChoiceField.__init__` is called.

```
field = ChoiceField(choices=[1,2])
field.choices = [1]  # Should no longer allow `2` as a choice
```

Currently, you must update `choices`, `grouped_choices`, and `choice_strings_to_values` to achieve this. This P/R keeps `grouped_choices` and `choice_strings_to_values` in sync whenever the `choices` are edited. 
rest_framework/fields.py