def getApproximateValue(value):
    """
    Return an approximate representation of any numerical value.
    Handles lists of values, and does not modify the value if it
    is not numerical.

    Args:
        value: Any object or value

    Returns:
        An approximate version of the value if it is numeric, or
        a list of numeric values (handles recursion), otherwise,
        the unmodified value.
    """
    if isinstance(value, (int, float)):
        approxVal = round(value, 3)
        return 0 if approxVal == 0 else approxVal
    elif hasattr(value, '__iter__'):
        return [getApproximateValue(v) for v in value]
    else:
        return value