diff --git a/qiskit/circuit/quantumcircuit.py b/qiskit/circuit/quantumcircuit.py index ec5f5cbef3dd..9c01f9e946a6 100644 --- a/qiskit/circuit/quantumcircuit.py +++ b/qiskit/circuit/quantumcircuit.py @@ -562,9 +562,11 @@ def __deepcopy__(self, memo=None): # copy.deepcopy(memo). cls = self.__class__ result = cls.__new__(cls) - for k in self.__dict__.keys() - {"_data"}: + for k in self.__dict__.keys() - {"_data", "_builder_api"}: setattr(result, k, copy.deepcopy(self.__dict__[k], memo)) + result._builder_api = _OuterCircuitScopeInterface(result) + # Avoids pulling self._data into a Python list # like we would when pickling. result._data = self._data.copy() diff --git a/test/python/circuit/test_circuit_operations.py b/test/python/circuit/test_circuit_operations.py index 2e4534881754..4b50f2a0ba92 100644 --- a/test/python/circuit/test_circuit_operations.py +++ b/test/python/circuit/test_circuit_operations.py @@ -12,6 +12,7 @@ """Test Qiskit's QuantumCircuit class.""" +import copy import numpy as np from ddt import data, ddt @@ -638,6 +639,20 @@ def test_measure_all(self): self.assertEqual(expected, circuit) + def test_measure_all_after_deepcopy(self): + """ + Test measure_all on a circuit that has been deep-copied. + """ + qc = QuantumCircuit(2) + qc.h(1) + + qc2 = copy.deepcopy(qc) + + qc.measure_all() + qc2.measure_all() + + self.assertEqual(qc, qc2) + def test_measure_all_not_add_bits_equal(self): """Test measure_all applies measurements to all qubits. Does not create a new ClassicalRegister if the existing one is big enough.