code: def _update_tileable_params(
      self, pruned_nodes: List[TileableData]
  ) -> None:
      # change dtypes and columns_value
      queue = [n for n in pruned_nodes]
      affected_nodes = set()
      while len(queue) > 0:
          node = queue.pop(0)
          if isinstance(node.op, ColumnPruneSupportedDataSourceMixin):
              affected_nodes.add(node)
          for successor in self._graph.successors(node):
              if successor not in affected_nodes:
                  queue.append(successor)
                  if not self._is_skipped_type(successor):
                      affected_nodes.add(successor)
  
      for node in affected_nodes:
          required_columns = self._get_required_columns(node)
          if (
              isinstance(node, BaseDataFrameData)
              and required_columns is not None
              and set(required_columns) != set(node.dtypes.index)
          ):
              new_dtypes = pd.Series(
                  dict(
                      (col, dtype)
                      for col, dtype in node.dtypes.items()
                      if col in required_columns
                  )
              )
              new_columns_value = parse_index(
                  new_dtypes.index, store_data=True
              )
              node._dtypes = new_dtypes
              node._columns_value = new_columns_value
              node._shape = (node.shape[0], len(new_dtypes))
  
imports: from typing import List, Dict, Set, Any, Type, Union, Optional
  import pandas
  from .input_column_selector import InputColumnSelector
  from .self_column_selector import SelfColumnSelector
  from ..core import register_optimization_rule
  from ...core import OptimizationRecord, OptimizationRecordType, OptimizationRule, OptimizationRecords, Optimizer
  from .....core import TileableData
  from .....core.graph import EntityGraph
  from .....dataframe.core import parse_index, BaseSeriesData, BaseDataFrameData
  from .....dataframe.datasource.core import ColumnPruneSupportedDataSourceMixin
  from .....dataframe.groupby.aggregation import DataFrameGroupByAgg
  from .....dataframe.indexing.getitem import DataFrameIndex
  from .....dataframe.merge import DataFrameMerge
  from .....utils import implements
label_desc: Use image node_id 9 for calling the ColumnPruningRule obj's underlying member method code with example usage: obj._update_tileable_params(pruned_nodes) without return types