code: def _RecurseOverObject(obj, factory, parent=None):
    
    if _IsSudsIterable(obj):
      # Since in-place modification of the Suds object is taking place, the
      # iterator should be done over a frozen copy of the unpacked fields.
      copy_of_obj = tuple(obj)
      for item in copy_of_obj:
        if _IsSudsIterable(item):
          if 'xsi_type' in item:
            if isinstance(obj, tuple):
              parent[obj[0]] = _PackForSuds(obj[1], factory)
            else:
              obj.remove(item)
              obj.append(_PackForSuds(item, factory))
          _RecurseOverObject(item, factory, obj)
docs: Recurses over a nested structure to look for changes in Suds objects.
  
    Args:
      obj: A parameter for a SOAP request field which is to be inspected and
          will be packed for Suds if an xsi_type is specified, otherwise will be
          left unaltered.
      factory: The suds.client.Factory object which can create instances of the
          classes generated from the WSDL.
      parent: The parent object that contains the obj parameter to be inspected.