Uso doble confuso de la notación de asterisco de Python (como un argumento de función, o como una definición de función)

Estoy un poco confundido. Vamos a crear una función llamada x. Sé que al poner * antes de la y, esto significa que podemos agregar tantos argumentos como queramos.

def x(*y):
    return y

Sin embargo.

Caso 1:

>>> x(1, 2)
(1, 2)

Caso 2: Pasemos una lista [1,2] con un asterisco delante de ella:

>>> x(*[1,2])
(1, 2)

Parece que el asterisco único tiene dos usos:

Para permitir múltiples argumentos en una función, esencialmente ponerlos en una listaSi se hace dos veces, para "separar" una lista en elementos separados

¿Por qué es esto? ¿Por qué no puedo hacer algo como: * a * b?

Respuestas a la pregunta(2)

Su respuesta a la pregunta