def equivalent(list1, list2):
    """ Checks if two (possibly nested) lists are equivalent. Recursive.
    
    Args:
        list1, list2 (lists): The lists to compare
        
    Returns:
        bool: Whether the lists are equivalent
    """
    
    # Base case
    if not isinstance(list1, list) and not isinstance(list2, list):
        return type(list1) == type(list2) and list1 == list2
    # Exit case
    elif not isinstance(list1, list) or not isinstance(list2, list) or len(list1) != len(list2):
        return False
    # Recursive case
    else:
        for i in range(len(list1)):
            if not equivalent(list1[i], list2[i]):
                return False # Looks redundant, but it isn't. We need to check for each.
    
    # If we got through everything else. Will only happen in list cases.
    return True