diff --git a/django/forms/fields.py b/django/forms/fields.py
index 8abb1b3..3c030df 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -971,6 +971,11 @@ class MultiValueField(Field):
                 f.required = False
         self.fields = fields
 
+    def __deepcopy__(self, memo):
+        result = super(MultiValueField, self).__deepcopy__(memo)
+        result.fields = tuple([x.__deepcopy__(memo) for x in self.fields])
+        return result
+
     def validate(self, value):
         pass
 
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 168bc1d..18ab38f 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -2,6 +2,7 @@
 from __future__ import unicode_literals
 
 import datetime
+import copy
 
 from django.core.files.uploadedfile import SimpleUploadedFile
 from django.core.validators import RegexValidator
@@ -1793,6 +1794,22 @@ class FormsTestCase(TestCase):
         self.assertTrue(form.is_valid())
         self.assertEqual(form.cleaned_data, {'name' : 'fname lname'})
 
+    def test_deep_copy(self):
+        class ChoicesField(MultiValueField):
+            def __init__(self, fields=(), *args, **kwargs):
+                fields = (ChoiceField(label='Rank',
+                           choices=((1,1),(2,2))),
+                          CharField(label='Name', max_length=10))
+                super(ChoicesField, self).__init__(fields=fields, *args, **kwargs)
+
+
+        field = ChoicesField()
+        field2 = copy.deepcopy(field)
+        self.assertTrue(isinstance(field2, ChoicesField))
+        self.assertFalse(id(field2.fields) == id(field.fields))
+        self.assertFalse(id(field2.fields[0].choices) ==
+                         id(field.fields[0].choices))
+
     def test_multivalue_optional_subfields(self):
         class PhoneField(MultiValueField):
             def __init__(self, *args, **kwargs):
