It's because any iterable can be joined (e.g, list, tuple, dict, set), but the result and the "joiner" must be strings.

For example:

'_'.join(['welcome', 'to', 'stack', 'overflow'])
'_'.join(('welcome', 'to', 'stack', 'overflow'))

'welcome_to_stack_overflow'

Using something else than strings will raise the following error:

TypeError: sequence item 0: expected str instance, int found