Вы не можете переназначить значения кортежа. Они намеренно неизменны: если вы создали кортеж, вы можете быть уверены, что он никогда не изменится. Это очень полезно для написания правильного кода!
Но что, если вы хотите другой кортеж? Вот где приходит метод копирования:
val tuple = (1, "test")
val another = tuple.copy(_2 = "new")
или если вы действительно хотите использовать переменную для хранения кортежа:
var tuple = (1, "test")
tuple = tuple.copy(_2 = "new")
В качестве альтернативы, если вы действительно хотите, чтобы ваши значения изменялись индивидуально, вы можете вместо этого использовать класс case (возможно, с неявным преобразованием, чтобы вы могли получить кортеж, когда вам это нужно):
case class Doublet[A,B](var _1: A, var _2: B) {}
implicit def doublet_to_tuple[A,B](db: Doublet[A,B]) = (db._1, db._2)
val doublet = Doublet(1, "test")
doublet._2 = "new"