Por que uma função pode modificar alguns argumentos como percebidos pelo chamador, mas não outro

Estou tentando entender a abordagem do Python para o escopo variável. Neste exemplo, por quef() capaz de alterar o valor dex, conforme percebido emmain(), mas não o valor den?

def f(n, x):
    n = 2
    x.append(4)
    print('In f():', n, x)

def main():
    n = 1
    x = [0,1,2,3]
    print('Before:', n, x)
    f(n, x)
    print('After: ', n, x)

main()

Saída

Before: 1 [0, 1, 2, 3]
In f(): 2 [0, 1, 2, 3, 4]
After:  1 [0, 1, 2, 3, 4]

questionAnswers(10)

yourAnswerToTheQuestion