diff --git a/vm/src/stdlib/collections.rs b/vm/src/stdlib/collections.rs index 88fa4d1d7..ad5844dfe 100644 --- a/vm/src/stdlib/collections.rs +++ b/vm/src/stdlib/collections.rs @@ -137,17 +137,13 @@ mod _collections { fn extend(zelf: PyRef, iter: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> { // TODO: use length_hint here and for extendleft if zelf.is(&iter) { - let iter = - PyIterable::try_from_object(vm, PyDeque::iter(zelf.copy().into_ref(vm), vm)?)?; - for elem in iter.iter(vm)? { - zelf.append(elem?) - } - Ok(()) + let copied: Vec = vm.extract_elements(zelf.as_object())?; + zelf._extend(copied.into_iter().map(Ok))?; } else { let iter = PyIterable::try_from_object(vm, iter)?; - - zelf._extend(iter.iter(vm)?) + zelf._extend(iter.iter(vm)?)?; } + Ok(()) } #[pymethod]