En Pandas, ¿el método .iloc da una copia o vista?

Me parece que el resultado es un poco aleatorio. A veces es una copia, a veces es una vista. Por ejemplo:

df = pd.DataFrame([{'name':'Marry', 'age':21},{'name':'John','age':24}],index=['student1','student2'])

df
              age   name
   student1   21  Marry
   student2   24   John

Ahora, déjame intentar modificarlo un poco.

df2= df.loc['student1']
df2 [0] = 23
df
              age   name
   student1   21  Marry
   student2   24   John

Como puede ver, nada cambió. df2 es una copia. Sin embargo, si agrego otro estudiante al marco de datos ...

df.loc['student3'] = ['old','Tom']
df
               age   name
    student1   21  Marry
    student2   24   John
    student3  old    Tom

Intenta cambiar la edad de nuevo.

df3=df.loc['student1']
df3[0]=33
df
               age   name
    student1   33  Marry
    student2   24   John
    student3  old    Tom

Ahora df3 de repente se convirtió en una vista. Que esta pasando? ¿Supongo que el valor 'viejo' es la clave?