python pandas dataframe, ¿es paso por valor o paso por referencia

Si paso un marco de datos a una función y lo modifico dentro de la función, ¿es paso por valor o paso por referencia?

Ejecuto el siguiente código

a = pd.DataFrame({'a':[1,2], 'b':[3,4]})
def letgo(df):
    df = df.drop('b',axis=1)
letgo(a)

El valor dea no cambia después de la llamada a la función. ¿Significa que es paso por valor?

También probé lo siguiente

xx = np.array([[1,2], [3,4]])
def letgo2(x):
    x[1,1] = 100
def letgo3(x):
    x = np.array([[3,3],[3,3]])

Resultaletgo2() cambiaxx yletgo3() no. ¿Por qué es como este?

Respuestas a la pregunta(6)

Su respuesta a la pregunta