docstr: can an object for safe pickling
  
  Parameters
  ----------
  obj
      The object to be canned
  keys : list (optional)
      list of attribute names that will be explicitly canned / uncanned
  hook : callable (optional)
      An optional extra callable,
      which can do additional processing of the uncanned object.
  large data may be offloaded into the buffers list,
  used for zero-copy transfers.
code: def __init__(self, obj, keys=[], hook=None):
      """can an object for safe pickling
  
      Parameters
      ----------
      obj
          The object to be canned
      keys : list (optional)
          list of attribute names that will be explicitly canned / uncanned
      hook : callable (optional)
          An optional extra callable,
          which can do additional processing of the uncanned object.
      large data may be offloaded into the buffers list,
      used for zero-copy transfers.
      """
      self.keys = keys
      self.obj = copy.copy(obj)
      self.hook = can(hook)
      for key in keys:
          setattr(self.obj, key, can(getattr(obj, key)))
  
      self.buffers = []
  
imports: import copy
  import functools
  import sys
  from types import FunctionType
  from traitlets import import_item
  from traitlets.log import get_logger
  from .None import codeutil
label_desc: Use image node_id 1 to create a new CannedObject object  with example: obj = CannedObject(obj, keys, hook)