当 Scala 映射被更新并分配给 Var 时会发生什么?

what happens to a scala map when it is updated and assigned to a var?

提问人:Anwesha Bhattacharya 提问时间:3/22/2022 更新时间:3/22/2022 访问量:89

问:

学习 Scala 的第 3 天。

我想地图是不可变的。我想知道,当我们更新不可变地图并将其分配给新变量时,旧地图会发生什么?内存是不是立即释放了?

另外,当新地图被分配给一个根据定义是可变的变量时,这意味着什么?因为默认情况下是地图,所以即使是新地图也是不可变的。

有人知道答案吗?有没有好的资源可以向我解释这些事情?(引擎盖下发生了什么等)

斯卡拉 地图 不变性 无功型 可变

评论

1赞 Jean-Philippe Pellet 3/22/2022
一般来说,我会推荐 Daniel Spiewak 关于函数式数据结构的演讲。

答:

3赞 Tim 3/22/2022 #1

“旧地图会怎样?”

这取决于是否有其他人在使用它。否则,它使用的内存将在某个时候通过称为“垃圾回收”的过程释放。程序无法判断何时实际发生这种情况。

“当将新地图分配给 Var 时,[这意味着] 什么”

val两者都定义了一个引用对象的“变量”。区别在于 a 始终指向同一对象,但 a 可以更新为指向不同的对象。varvalvar

相反,和是对象本身的属性。对象将始终具有相同的值,而对象的值可以更改。mutableimmutableimmutablemutable

评论

2赞 Jean-Philippe Pellet 3/22/2022
也可能是新构建的地图巧妙地与旧地图共享一些内部结构,在这种情况下,旧地图当然不会被垃圾收集。