diff --git a/multidict/_multidict_py.py b/multidict/_multidict_py.py
index f9c8f38..bff8276 100644
--- a/multidict/_multidict_py.py
+++ b/multidict/_multidict_py.py
@@ -185,12 +185,13 @@ class MultiDict(_Base, abc.MutableMapping):
             elif hasattr(arg, 'items'):
                 items = arg.items()
             else:
+                items = []
                 for item in arg:
                     if not len(item) == 2:
                         raise TypeError(
                             "{} takes either dict or list of (key, value) "
                             "tuples".format(name))
-                items = arg
+                    items.append(item)
 
             for key, value in items:
                 method(key, value)

diff --git a/tests/test_multidict.py b/tests/test_multidict.py
index 8fa6e78..268a26e 100644
--- a/tests/test_multidict.py
+++ b/tests/test_multidict.py
@@ -73,6 +73,15 @@ class _BaseTest(_Root):
         self.assertEqual(sorted(d.items()), [('key', 'value1'),
                                              ('key2', 'value2')])
 
+    def test_instantiate__from_generator(self):
+        d = self.make_dict((str(i), i) for i in range(2))
+
+        self.assertEqual(d, {'0': 0, '1': 1})
+        self.assertEqual(len(d), 2)
+        self.assertEqual(sorted(d.keys()), ['0', '1'])
+        self.assertEqual(sorted(d.values()), [0, 1])
+        self.assertEqual(sorted(d.items()), [('0', 0), ('1', 1)])
+
     def test_getone(self):
         d = self.make_dict([('key', 'value1')], key='value2')
         self.assertEqual(d.getone('key'), 'value1')

Python MultiDict constructor discards generator content
When using the pure Python implementation, if a `MultiDict` is constructed with a generator argument:

    headers = CIMultiDict(
        (
            k.decode('utf-8', 'surrogateescape'),
            v.decode('utf-8', 'surrogateescape'),
        )
        for k, v in event.headers
    )

then the resulting `MultiDict` will be empty, instead of containing the key/value pairs as expected. This is because the generator is iterated over twice, and the first iteration discards all of the pairs.
tests/test_multidict.py::TestPyMultiDictProxy::test_instantiate__from_generator tests/test_multidict.py::PyMutableMultiDictTests::test_instantiate__from_generator
tests/test_multidict.py::TestPyMultiDictProxy::test__iter__ tests/test_multidict.py::TestPyMultiDictProxy::test__repr__ tests/test_multidict.py::TestPyMultiDictProxy::test_and tests/test_multidict.py::TestPyMultiDictProxy::test_and_issue_410 tests/test_multidict.py::TestPyMultiDictProxy::test_cannot_create_from_unaccepted tests/test_multidict.py::TestPyMultiDictProxy::test_copy tests/test_multidict.py::TestPyMultiDictProxy::test_eq tests/test_multidict.py::TestPyMultiDictProxy::test_exposed_names tests/test_multidict.py::TestPyMultiDictProxy::test_get tests/test_multidict.py::TestPyMultiDictProxy::test_getall tests/test_multidict.py::TestPyMultiDictProxy::test_getone tests/test_multidict.py::TestPyMultiDictProxy::test_instantiate__empty tests/test_multidict.py::TestPyMultiDictProxy::test_instantiate__from_arg0 tests/test_multidict.py::TestPyMultiDictProxy::test_instantiate__from_arg0_dict tests/test_multidict.py::TestPyMultiDictProxy::test_instantiate__with_kwargs tests/test_multidict.py::TestPyMultiDictProxy::test_isdisjoint tests/test_multidict.py::TestPyMultiDictProxy::test_isdisjoint2 tests/test_multidict.py::TestPyMultiDictProxy::test_items__contains tests/test_multidict.py::TestPyMultiDictProxy::test_items__repr__ tests/test_multidict.py::TestPyMultiDictProxy::test_keys__contains tests/test_multidict.py::TestPyMultiDictProxy::test_keys__repr__ tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_equal tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_greater tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_greater_equal tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_less tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_less_equal tests/test_multidict.py::TestPyMultiDictProxy::test_keys_is_set_not_equal tests/test_multidict.py::TestPyMultiDictProxy::test_ne tests/test_multidict.py::TestPyMultiDictProxy::test_or tests/test_multidict.py::TestPyMultiDictProxy::test_or_issue_410 tests/test_multidict.py::TestPyMultiDictProxy::test_preserve_stable_ordering tests/test_multidict.py::TestPyMultiDictProxy::test_repr_issue_410 tests/test_multidict.py::TestPyMultiDictProxy::test_sub tests/test_multidict.py::TestPyMultiDictProxy::test_sub_issue_410 tests/test_multidict.py::TestPyMultiDictProxy::test_values__contains tests/test_multidict.py::TestPyMultiDictProxy::test_values__repr__ tests/test_multidict.py::TestPyMultiDictProxy::test_xor tests/test_multidict.py::TestPyMultiDictProxy::test_xor_issue_410 tests/test_multidict.py::TestPyCIMultiDictProxy::test_basics tests/test_multidict.py::TestPyCIMultiDictProxy::test_copy tests/test_multidict.py::TestPyCIMultiDictProxy::test_exposed_names tests/test_multidict.py::TestPyCIMultiDictProxy::test_get tests/test_multidict.py::TestPyCIMultiDictProxy::test_getall tests/test_multidict.py::TestPyCIMultiDictProxy::test_items__repr__ tests/test_multidict.py::TestPyCIMultiDictProxy::test_keys__repr__ tests/test_multidict.py::TestPyCIMultiDictProxy::test_values__repr__ tests/test_multidict.py::PyMutableMultiDictTests::test__iter__ tests/test_multidict.py::PyMutableMultiDictTests::test__repr__ tests/test_multidict.py::PyMutableMultiDictTests::test_add tests/test_multidict.py::PyMutableMultiDictTests::test_and tests/test_multidict.py::PyMutableMultiDictTests::test_and_issue_410 tests/test_multidict.py::PyMutableMultiDictTests::test_cannot_create_from_unaccepted tests/test_multidict.py::PyMutableMultiDictTests::test_clear tests/test_multidict.py::PyMutableMultiDictTests::test_copy tests/test_multidict.py::PyMutableMultiDictTests::test_del tests/test_multidict.py::PyMutableMultiDictTests::test_eq tests/test_multidict.py::PyMutableMultiDictTests::test_exposed_names tests/test_multidict.py::PyMutableMultiDictTests::test_extend tests/test_multidict.py::PyMutableMultiDictTests::test_extend_from_proxy tests/test_multidict.py::PyMutableMultiDictTests::test_getall tests/test_multidict.py::PyMutableMultiDictTests::test_getone tests/test_multidict.py::PyMutableMultiDictTests::test_instantiate__empty tests/test_multidict.py::PyMutableMultiDictTests::test_instantiate__from_arg0 tests/test_multidict.py::PyMutableMultiDictTests::test_instantiate__from_arg0_dict tests/test_multidict.py::PyMutableMultiDictTests::test_instantiate__with_kwargs tests/test_multidict.py::PyMutableMultiDictTests::test_isdisjoint tests/test_multidict.py::PyMutableMultiDictTests::test_isdisjoint2 tests/test_multidict.py::PyMutableMultiDictTests::test_items__contains tests/test_multidict.py::PyMutableMultiDictTests::test_keys__contains tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_equal tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_greater tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_greater_equal tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_less tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_less_equal tests/test_multidict.py::PyMutableMultiDictTests::test_keys_is_set_not_equal tests/test_multidict.py::PyMutableMultiDictTests::test_ne tests/test_multidict.py::PyMutableMultiDictTests::test_or tests/test_multidict.py::PyMutableMultiDictTests::test_or_issue_410 tests/test_multidict.py::PyMutableMultiDictTests::test_pop tests/test_multidict.py::PyMutableMultiDictTests::test_pop_default tests/test_multidict.py::PyMutableMultiDictTests::test_pop_raises tests/test_multidict.py::PyMutableMultiDictTests::test_popitem tests/test_multidict.py::PyMutableMultiDictTests::test_popitem_empty_multidict tests/test_multidict.py::PyMutableMultiDictTests::test_repr_issue_410 tests/test_multidict.py::PyMutableMultiDictTests::test_set_default tests/test_multidict.py::PyMutableMultiDictTests::test_sub tests/test_multidict.py::PyMutableMultiDictTests::test_sub_issue_410 tests/test_multidict.py::PyMutableMultiDictTests::test_update tests/test_multidict.py::PyMutableMultiDictTests::test_values__contains tests/test_multidict.py::PyMutableMultiDictTests::test_xor tests/test_multidict.py::PyMutableMultiDictTests::test_xor_issue_410 tests/test_multidict.py::PyCIMutableMultiDictTests::test__repr__ tests/test_multidict.py::PyCIMutableMultiDictTests::test_add tests/test_multidict.py::PyCIMutableMultiDictTests::test_basics tests/test_multidict.py::PyCIMutableMultiDictTests::test_clear tests/test_multidict.py::PyCIMutableMultiDictTests::test_copy tests/test_multidict.py::PyCIMutableMultiDictTests::test_ctor tests/test_multidict.py::PyCIMutableMultiDictTests::test_del tests/test_multidict.py::PyCIMutableMultiDictTests::test_delitem tests/test_multidict.py::PyCIMutableMultiDictTests::test_exposed_names tests/test_multidict.py::PyCIMutableMultiDictTests::test_extend tests/test_multidict.py::PyCIMutableMultiDictTests::test_extend_from_proxy tests/test_multidict.py::PyCIMutableMultiDictTests::test_extend_with_upstr tests/test_multidict.py::PyCIMutableMultiDictTests::test_get tests/test_multidict.py::PyCIMutableMultiDictTests::test_getall tests/test_multidict.py::PyCIMutableMultiDictTests::test_items__repr__ tests/test_multidict.py::PyCIMutableMultiDictTests::test_keys__repr__ tests/test_multidict.py::PyCIMutableMultiDictTests::test_pop tests/test_multidict.py::PyCIMutableMultiDictTests::test_pop_default tests/test_multidict.py::PyCIMutableMultiDictTests::test_pop_raises tests/test_multidict.py::PyCIMutableMultiDictTests::test_popitem tests/test_multidict.py::PyCIMutableMultiDictTests::test_popitem_empty_multidict tests/test_multidict.py::PyCIMutableMultiDictTests::test_set_default tests/test_multidict.py::PyCIMutableMultiDictTests::test_setitem tests/test_multidict.py::PyCIMutableMultiDictTests::test_update tests/test_multidict.py::PyCIMutableMultiDictTests::test_values__repr__ tests/test_multidict.py::TestMultiDictProxy::test__iter__ tests/test_multidict.py::TestMultiDictProxy::test__repr__ tests/test_multidict.py::TestMultiDictProxy::test_and tests/test_multidict.py::TestMultiDictProxy::test_and_issue_410 tests/test_multidict.py::TestMultiDictProxy::test_cannot_create_from_unaccepted tests/test_multidict.py::TestMultiDictProxy::test_copy tests/test_multidict.py::TestMultiDictProxy::test_eq tests/test_multidict.py::TestMultiDictProxy::test_exposed_names tests/test_multidict.py::TestMultiDictProxy::test_get tests/test_multidict.py::TestMultiDictProxy::test_getall tests/test_multidict.py::TestMultiDictProxy::test_getone tests/test_multidict.py::TestMultiDictProxy::test_instantiate__empty tests/test_multidict.py::TestMultiDictProxy::test_instantiate__from_arg0 tests/test_multidict.py::TestMultiDictProxy::test_instantiate__from_arg0_dict tests/test_multidict.py::TestMultiDictProxy::test_instantiate__from_generator tests/test_multidict.py::TestMultiDictProxy::test_instantiate__with_kwargs tests/test_multidict.py::TestMultiDictProxy::test_isdisjoint tests/test_multidict.py::TestMultiDictProxy::test_isdisjoint2 tests/test_multidict.py::TestMultiDictProxy::test_items__contains tests/test_multidict.py::TestMultiDictProxy::test_items__repr__ tests/test_multidict.py::TestMultiDictProxy::test_keys__contains tests/test_multidict.py::TestMultiDictProxy::test_keys__repr__ tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_equal tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_greater tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_greater_equal tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_less tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_less_equal tests/test_multidict.py::TestMultiDictProxy::test_keys_is_set_not_equal tests/test_multidict.py::TestMultiDictProxy::test_ne tests/test_multidict.py::TestMultiDictProxy::test_or tests/test_multidict.py::TestMultiDictProxy::test_or_issue_410 tests/test_multidict.py::TestMultiDictProxy::test_preserve_stable_ordering tests/test_multidict.py::TestMultiDictProxy::test_repr_issue_410 tests/test_multidict.py::TestMultiDictProxy::test_sub tests/test_multidict.py::TestMultiDictProxy::test_sub_issue_410 tests/test_multidict.py::TestMultiDictProxy::test_values__contains tests/test_multidict.py::TestMultiDictProxy::test_values__repr__ tests/test_multidict.py::TestMultiDictProxy::test_xor tests/test_multidict.py::TestMultiDictProxy::test_xor_issue_410 tests/test_multidict.py::TestCIMultiDictProxy::test_basics tests/test_multidict.py::TestCIMultiDictProxy::test_copy tests/test_multidict.py::TestCIMultiDictProxy::test_exposed_names tests/test_multidict.py::TestCIMultiDictProxy::test_get tests/test_multidict.py::TestCIMultiDictProxy::test_getall tests/test_multidict.py::TestCIMultiDictProxy::test_items__repr__ tests/test_multidict.py::TestCIMultiDictProxy::test_keys__repr__ tests/test_multidict.py::TestCIMultiDictProxy::test_values__repr__ tests/test_multidict.py::MutableMultiDictTests::test__iter__ tests/test_multidict.py::MutableMultiDictTests::test__repr__ tests/test_multidict.py::MutableMultiDictTests::test_add tests/test_multidict.py::MutableMultiDictTests::test_and tests/test_multidict.py::MutableMultiDictTests::test_and_issue_410 tests/test_multidict.py::MutableMultiDictTests::test_cannot_create_from_unaccepted tests/test_multidict.py::MutableMultiDictTests::test_clear tests/test_multidict.py::MutableMultiDictTests::test_copy tests/test_multidict.py::MutableMultiDictTests::test_del tests/test_multidict.py::MutableMultiDictTests::test_eq tests/test_multidict.py::MutableMultiDictTests::test_exposed_names tests/test_multidict.py::MutableMultiDictTests::test_extend tests/test_multidict.py::MutableMultiDictTests::test_extend_from_proxy tests/test_multidict.py::MutableMultiDictTests::test_getall tests/test_multidict.py::MutableMultiDictTests::test_getone tests/test_multidict.py::MutableMultiDictTests::test_instantiate__empty tests/test_multidict.py::MutableMultiDictTests::test_instantiate__from_arg0 tests/test_multidict.py::MutableMultiDictTests::test_instantiate__from_arg0_dict tests/test_multidict.py::MutableMultiDictTests::test_instantiate__from_generator tests/test_multidict.py::MutableMultiDictTests::test_instantiate__with_kwargs tests/test_multidict.py::MutableMultiDictTests::test_isdisjoint tests/test_multidict.py::MutableMultiDictTests::test_isdisjoint2 tests/test_multidict.py::MutableMultiDictTests::test_items__contains tests/test_multidict.py::MutableMultiDictTests::test_keys__contains tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_equal tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_greater tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_greater_equal tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_less tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_less_equal tests/test_multidict.py::MutableMultiDictTests::test_keys_is_set_not_equal tests/test_multidict.py::MutableMultiDictTests::test_ne tests/test_multidict.py::MutableMultiDictTests::test_or tests/test_multidict.py::MutableMultiDictTests::test_or_issue_410 tests/test_multidict.py::MutableMultiDictTests::test_pop tests/test_multidict.py::MutableMultiDictTests::test_pop_default tests/test_multidict.py::MutableMultiDictTests::test_pop_raises tests/test_multidict.py::MutableMultiDictTests::test_popitem tests/test_multidict.py::MutableMultiDictTests::test_popitem_empty_multidict tests/test_multidict.py::MutableMultiDictTests::test_repr_issue_410 tests/test_multidict.py::MutableMultiDictTests::test_set_default tests/test_multidict.py::MutableMultiDictTests::test_sub tests/test_multidict.py::MutableMultiDictTests::test_sub_issue_410 tests/test_multidict.py::MutableMultiDictTests::test_update tests/test_multidict.py::MutableMultiDictTests::test_values__contains tests/test_multidict.py::MutableMultiDictTests::test_xor tests/test_multidict.py::MutableMultiDictTests::test_xor_issue_410 tests/test_multidict.py::CIMutableMultiDictTests::test__repr__ tests/test_multidict.py::CIMutableMultiDictTests::test_add tests/test_multidict.py::CIMutableMultiDictTests::test_basics tests/test_multidict.py::CIMutableMultiDictTests::test_clear tests/test_multidict.py::CIMutableMultiDictTests::test_copy tests/test_multidict.py::CIMutableMultiDictTests::test_ctor tests/test_multidict.py::CIMutableMultiDictTests::test_del tests/test_multidict.py::CIMutableMultiDictTests::test_delitem tests/test_multidict.py::CIMutableMultiDictTests::test_exposed_names tests/test_multidict.py::CIMutableMultiDictTests::test_extend tests/test_multidict.py::CIMutableMultiDictTests::test_extend_from_proxy tests/test_multidict.py::CIMutableMultiDictTests::test_extend_with_upstr tests/test_multidict.py::CIMutableMultiDictTests::test_get tests/test_multidict.py::CIMutableMultiDictTests::test_getall tests/test_multidict.py::CIMutableMultiDictTests::test_items__repr__ tests/test_multidict.py::CIMutableMultiDictTests::test_keys__repr__ tests/test_multidict.py::CIMutableMultiDictTests::test_pop tests/test_multidict.py::CIMutableMultiDictTests::test_pop_default tests/test_multidict.py::CIMutableMultiDictTests::test_pop_raises tests/test_multidict.py::CIMutableMultiDictTests::test_popitem tests/test_multidict.py::CIMutableMultiDictTests::test_popitem_empty_multidict tests/test_multidict.py::CIMutableMultiDictTests::test_set_default tests/test_multidict.py::CIMutableMultiDictTests::test_setitem tests/test_multidict.py::CIMutableMultiDictTests::test_update tests/test_multidict.py::CIMutableMultiDictTests::test_values__repr__ tests/test_multidict.py::TestPyUpStr::test_ctor tests/test_multidict.py::TestPyUpStr::test_ctor_buffer tests/test_multidict.py::TestPyUpStr::test_ctor_repr tests/test_multidict.py::TestPyUpStr::test_ctor_str tests/test_multidict.py::TestPyUpStr::test_ctor_str_uppercase tests/test_multidict.py::TestPyUpStr::test_upper tests/test_multidict.py::TestUpStr::test_ctor tests/test_multidict.py::TestUpStr::test_ctor_buffer tests/test_multidict.py::TestUpStr::test_ctor_repr tests/test_multidict.py::TestUpStr::test_ctor_str tests/test_multidict.py::TestUpStr::test_ctor_str_uppercase tests/test_multidict.py::TestUpStr::test_upper tests/test_multidict.py::TestPyTypes::test_create_ci_multidict_proxy_from_multidict tests/test_multidict.py::TestPyTypes::test_create_cimultidict_proxy_from_nonmultidict tests/test_multidict.py::TestPyTypes::test_create_multidict_proxy_from_cimultidict tests/test_multidict.py::TestPyTypes::test_create_multidict_proxy_from_nonmultidict tests/test_multidict.py::TestPyTypes::test_dict_not_inherited_from_proxy tests/test_multidict.py::TestPyTypes::test_dicts tests/test_multidict.py::TestPyTypes::test_proxies tests/test_multidict.py::TestPyTypes::test_proxy_not_inherited_from_dict tests/test_multidict.py::TestTypes::test_create_ci_multidict_proxy_from_multidict tests/test_multidict.py::TestTypes::test_create_cimultidict_proxy_from_nonmultidict tests/test_multidict.py::TestTypes::test_create_multidict_proxy_from_cimultidict tests/test_multidict.py::TestTypes::test_create_multidict_proxy_from_nonmultidict tests/test_multidict.py::TestTypes::test_dict_not_inherited_from_proxy tests/test_multidict.py::TestTypes::test_dicts tests/test_multidict.py::TestTypes::test_proxies tests/test_multidict.py::TestTypes::test_proxy_not_inherited_from_dict