In many cases the objects in a graph have some kind of in-place option, and in fact we often explicitly clone objects to avoid this. It is necessary in general, since the "same" object could be given to multiple PipeOps. However, the Graph should know about this and should control pipeops in some way: the last pipeop that gets some object is allowed to modify it in-place. There should be a way to avoid this, in particular when "keep results" is given.
In many cases the objects in a graph have some kind of in-place option, and in fact we often explicitly clone objects to avoid this. It is necessary in general, since the "same" object could be given to multiple PipeOps. However, the Graph should know about this and should control pipeops in some way: the last pipeop that gets some object is allowed to modify it in-place. There should be a way to avoid this, in particular when "keep results" is given.