values = [1, 2]
print([0, *values, 3, *(4, 5), *range(6, 8)])
print([*'aé🙂'], [*b'\x00\xff'])
print([*{'b': 2, 'a': 1}], [*{'b': 2, 'a': 1}.values()])
cursor = iter([4, 5, 6])
print(next(cursor), [*cursor], next(cursor, 99))
print((*(), *[1, 'two'], *(True, None), 3))
print((*(1, *[2, 3]), *[4, *(5, 6)]))
a, b, c = (*[7, 8], 9)
print(a, b, c)

source = [1, 2]
def mutate():
    source.append(3)
    return 4
print([*source, mutate(), *source])
print(source)

def mark(label, value):
    print(label)
    return value
print([*mark('first', [1, 2]), mark('middle', 3), *mark('last', (4, 5))])
print((*mark('tuple first', (1, 'a')), mark('tuple last', True)))

combined = {0, *[1, 1, 2], *range(2, 5), *iter([4, 5])}
print(sorted(combined), sorted({*'éaé🙂'}), sorted({*b'aba'}))
print([*[], *()], (*[], *()), len({*[], *()}))

def fail():
    raise ValueError('display failed')
    return 0
try:
    [*mark('before', [1]), fail(), *mark('never', [2])]
except ValueError as error:
    print(error)

class Value:
    def __init__(self, number):
        self.number = number
value = Value(7)
original = [value]
copy = [*original]
print(copy is original, copy[0] is value)
original.clear()
print(copy[0].number)

def collect(*args):
    print(args)
collect(*[1, *(2, 'three')], *(4, *[5, True]))
