Esta es otra de esas preguntas largas que tiene que ver con lo siguientes temas:
- Clases de nuevo estilo
- Datos mutables e inmutables
- Asignación de variables
- Paso por llamada
Pero voy a ser muy breve, cada vez que haces una asignación lo que haces es poner una etiqueta a ese objeto (recuerda un objeto es cualquier cosa que espacio en memoria), si ese objeto no tiene ninguna etiqueta asociada la memoria es liberada por el recolector de basura.
En ningún momento hace copia del objeto a menos que lo haga explicitamente.