code: def copy(self):
          
          new_prog = self.copy_everything_except_instructions()
          new_prog._instructions = self._instructions.copy()
          return new_prog
docs: Perform a shallow copy of this program.
  
          QuilAtom and AbstractInstruction objects should be treated as immutable to avoid
          strange behavior when performing a copy.
  
          :return: a new Program