code: def test_not_destructive(self):
      # Checks that manipulating a cloned graph leaves the original unchanged.
      r1, r2, r5 = MyVariable(1), MyVariable(2), MyVariable(5)
      node = MyOp.make_node(MyOp.make_node(r1, r2).outputs[0], r5)
      _, new = clone([r1, r2, r5], node.outputs, False)
      new_node = new[0].owner
      new_node.inputs = MyVariable(7), MyVariable(8)
      assert self.str(inputs(new_node.outputs), new_node.outputs) == [
          "MyOp(R7, R8)"
      ]
      assert self.str(inputs(node.outputs), node.outputs) == [
          "MyOp(MyOp(R1, R2), R5)"
      ]
  
imports: from __future__ import absolute_import, print_function, division
  from itertools import count
  import pickle
  import unittest
  from nose.plugins.skip import SkipTest
  import numpy
  from theano import sparse, shared, tensor
  from theano.gof.graph import Apply, as_string, clone, general_toposort, inputs, io_toposort, is_same_graph, Variable
  from theano.gof.op import Op
  from theano.gof.type import Type
label_desc: Use image node_id 3 for calling the TestClone obj's underlying member method code with example usage: obj.test_not_destructive() without return types