class_docstr: A lazy execution plan for a Dataset.
class_docstr_tok: ["A","lazy","execution","plan","for","a","Dataset","."]
docstr: Create a deep copy of this execution plan.
  
  This copy can be executed AND cleared without mutating the original.
  
  Returns:
      A deep copy of this execution plan.
docstr_tok: ["Create","a","deep","copy","of","this","execution","plan",".","This","copy","can","be","executed","AND","cleared","without","mutating","the","original",".","Returns",":","A","deep","copy","of","this","execution","plan","."]
code: def deep_copy(self) -> "ExecutionPlan":
      """Create a deep copy of this execution plan.
  
      This copy can be executed AND cleared without mutating the original.
  
      Returns:
          A deep copy of this execution plan.
      """
      in_blocks = self._in_blocks
      if isinstance(in_blocks, BlockList):
          in_blocks = in_blocks.copy()
      plan_copy = ExecutionPlan(
          in_blocks,
          copy.copy(self._in_stats),
          run_by_consumer=self._run_by_consumer,
      )
      if self._snapshot_blocks:
          # Copy over the existing snapshot.
          plan_copy._snapshot_blocks = self._snapshot_blocks.copy()
          plan_copy._snapshot_operator = copy.copy(
              self._snapshot_operator
          )
          plan_copy._snapshot_stats = copy.copy(self._snapshot_stats)
      plan_copy._dataset_name = self._dataset_name
      return plan_copy
  
imports: import copy
  import itertools
  from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Union
  import ray
  from ray._private.internal_api import get_memory_info_reply, get_state_from_address
  from ray.data._internal.block_list import BlockList
  from ray.data._internal.compute import ActorPoolStrategy, BlockTransform, CallableClass, ComputeStrategy, TaskPoolStrategy, UserDefinedFunction, get_compute, is_task_compute
  from ray.data._internal.dataset_logger import DatasetLogger
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data._internal.lazy_block_list import LazyBlockList
  from ray.data._internal.logical.interfaces.logical_operator import LogicalOperator
  from ray.data._internal.logical.operators.from_operators import AbstractFrom
  from ray.data._internal.logical.operators.input_data_operator import InputData
  from ray.data._internal.logical.operators.read_operator import Read
  from ray.data._internal.logical.rules.operator_fusion import _are_remote_args_compatible
  from ray.data._internal.stats import DatasetStats, DatasetStatsSummary
  from ray.data._internal.util import create_dataset_tag, unify_block_metadata_schema
  from ray.data.block import Block, BlockMetadata
  from ray.data.context import DataContext
  from ray.types import ObjectRef
  from ray.util.debug import log_once
label_desc: Use image node_id 7 for calling the ExecutionPlan obj's underlying member method code with example usage: obj.deep_copy() and returns: plan_copy