code: def is_changed(self, target):
      previous_params = self.target_params
      super(_MultiNodeOptimizer, self).__setattr__(
          "target_params",
          [
              (name, param.data is not None)
              for name, param in sorted(target.namedparams())
          ],
      )
      if len(previous_params) != len(self.target_params):
          return True
  
      for param1, param2 in zip(self.target_params, previous_params):
          if (param1[0] != param2[0]) or param1[1] != param2[1]:
              return True
      return False
  
imports: import chainer
  import copy
label_desc: Use image node_id 3 for calling the _MultiNodeOptimizer obj's underlying member method code with example usage: obj.is_changed(target) and returns: False, True, True