Add remove_columns=True
{'login': 'thomasw21', 'id': 24695242, 'node_id': 'MDQ6VXNlcjI0Njk1MjQy', 'avatar_url': 'https://avatars.githubusercontent.com/u/24695242?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/thomasw21', 'html_url': 'https://github.com/thomasw21', 'followers_url': 'https://api.github.com/users/thomasw21/followers', 'following_url': 'https://api.github.com/users/thomasw21/following{/other_user}', 'gists_url': 'https://api.github.com/users/thomasw21/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/thomasw21/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/thomasw21/subscriptions', 'organizations_url': 'https://api.github.com/users/thomasw21/orgs', 'repos_url': 'https://api.github.com/users/thomasw21/repos', 'events_url': 'https://api.github.com/users/thomasw21/events{/privacy}', 'received_events_url': 'https://api.github.com/users/thomasw21/received_events', 'type': 'User', 'site_admin': False}
[]
[]
_The documentation is not available anymore as the PR was closed or merged._ Any reason why we can't just do `[inputs.copy()]` in this line for in-place operations to not have effects anymore:
https://github.com/huggingface/datasets/blob/bf432011ff9155a5bc16c03956bc63e514baf80d/src/datasets/arrow_dataset.py#L2232.

(in the `batched` case, we can also copy the inputs' values (list objects) to ignore in-place modifications to the inputs' columns)

I think `remove_columns=True` has no meaning, so I'm not a fan of this change. @mariosasko copy does have a cost associated with it ... and plus you'll have to consider `deepcopy` Imagine columnds that are list of list of list of list .... Though I have to agree that `remove_columns=True` doesn't make sense (but, IMO, neither does it in its current use-case as it should refer to `input_columns`)  Okay closing this PR for the following reasons:
 - `remove_columns=True` was expected to keep the `.update`-like operator for `.map`. I initially thought it would be a good way to ignore function side effects and only keep output of that function (cf. PR description).
 - expected `remove_columns=True` is a bad API according to @mariosasko and introduces unecessary changes for little gain (strictly equivalent to `remove_columns=dset.column_names`)
This should fix all the issue we have with in place operations in mapping functions. This is crucial as where we do some weird things like:
```
def apply(batch):
    batch_size = len(batch["id"])
    batch["text"] = ["potato" for _ range(batch_size)]
    return {}

# Columns are: {"id": int}
dset.map(apply, batched=True, remove_columns="text") # crashes because `text` is not in the original columns
dset.map(apply, batched=True) # mapped datasets has `text` column
```

In this PR we suggest to have `remove_columns=True` so that we ignore the input completely, and just use the output to generate mapped dataset. This means that inplace operations won't have any effects anymore.
{'url': 'https://api.github.com/repos/huggingface/datasets/issues/4197/reactions', 'total_count': 0, '+1': 0, '-1': 0, 'laugh': 0, 'hooray': 0, 'confused': 0, 'heart': 0, 'rocket': 0, 'eyes': 0}
{'url': 'https://api.github.com/repos/huggingface/datasets/pulls/4197', 'html_url': 'https://github.com/huggingface/datasets/pull/4197', 'diff_url': 'https://github.com/huggingface/datasets/pull/4197.diff', 'patch_url': 'https://github.com/huggingface/datasets/pull/4197.patch', 'merged_at': None}