code: def test_pipeline_builder_copy_semantic():
      builder = (
          PipelineBuilder()
          .add_node("operation_d")
          .add_node("operation_b")
          .add_branch("operation_a", "operation_f")
          .join_branches("operation_f")
      )
  
      # repeated builds return same logial results
      assert graphs_same(builder.build(), builder.build())
      # but different objects
      assert id(builder.build()) != id(builder.build())
      assert all(
          [
              id(n1) != id(n2)
              for n1, n2 in zip(builder.to_nodes(), builder.to_nodes())
          ]
      )
  
imports: from copy import copy
  from fedot.core.pipelines.pipeline_builder import PipelineBuilder, merge_pipeline_builders
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from test.unit.dag.test_graph_utils import graphs_same
label_desc: Use image node_id 7 for calling a global function with example usage: test_pipeline_builder_copy_semantic() without return types