Digamos que temos uma classe de caso Item com algumas propriedades
case class Item(name:String, category:String, price:Double)
Em um determinado ponto do ciclo de vida do seu aplicativo, você pode precisar ‘atualizar’ uma das propriedades de uma instância desta classe de caso. Digamos, por exemplo, que precisamos atualizar a propriedade ‘preço’. No entanto, o objeto Item é imutável. Claro que você pode mudar isso:
case class Item(name:String, description:String, var price:Double)
No entanto, isso não é muito bom imho. Em vez disso, as classes de caso Scala nos permitem clonar o objeto e alterar seletivamente os valores das propriedades usando o método de cópia. Por exemplo:
val items = List(Item("Apple","Fruit", 1.50),Item("Pear", "Fruit", 2.00))
val items_on_sale = items.map(_.copy(price = 0.50))
Isso torna muito fácil fazer pequenas transformações em seus objetos, mantendo a imutabilidade