Please help to convert the following Python docstring to Google style. Wrap the docstring at 110 characters long. Do not modify the function body or modify the meaning of the docstring.

def also(df: pd.DataFrame, func: Callable, *args, **kwargs) -> pd.DataFrame:
    """Run a function with side effects.

    This function allows you to run an arbitrary function in the method chain. Doing so will let you do things like save the dataframe to disk midway
    while continuing to modify the dataframe afterwards.

    Example:
        >>> import pandas as pd
        >>> df = (
        ...     pd.DataFrame({"a": [1, 2, 3], "b": list("abc")})
        ...     .query("a > 1")
        ...     .also(lambda df: print(f"DataFrame shape is: {df.shape}"))
        ...     .also(
        ...         lambda df: print(f"Columns: {df.columns}")
        ...     )
        ... )
        DataFrame shape is: (2, 2)
        Columns: Index(['a_new', 'b'], dtype='object')

    :param df: A pandas DataFrame.
    :param func: A function you would like to run in the method chain.
        It should take one DataFrame object as a parameter and have no return.
        If there is a return, it will be ignored.
    :param args: Optional arguments for `func`.
    :param kwargs: Optional keyword arguments for `func`.
    :returns: The input pandas DataFrame, unmodified.
    """  # noqa: E501
    func(df.copy(), *args, **kwargs)
    return df
```python
def also(df: pd.DataFrame, func: Callable, *args, **kwargs) -> pd.DataFrame:
    """Run a function with side effects.

    Allows you to run an arbitrary function in the method chain, which
    lets you do things like saving the dataframe to disk midway while
    continuing to modify it afterwards.

    Example:
        >>> import pandas as pd
        >>> df = (
        ...     pd.DataFrame({"a": [1, 2, 3], "b": list("abc")})
        ...     .query("a > 1")
        ...     .also(lambda df: print(f"DataFrame shape is: {df.shape}"))
        ...     .also(
        ...         lambda df: print(f"Columns: {df.columns}")
        ...     )
        ... )
        DataFrame shape is: (2, 2)
        Columns: Index(['a_new', 'b'], dtype='object')

    Args:
        df: A pandas DataFrame.
        func: A function you would like to run in the method chain.
            It should take one DataFrame object as a parameter and
            have no return. If there is a return, it will be ignored.
        args: Optional arguments for `func`.
        kwargs: Optional keyword arguments for `func`.

    Returns:
        The input pandas DataFrame, unmodified.
    """
    func(df.copy(), *args, **kwargs)
    return df
```