在Scala中,不可变列表是否共享内存?

时间:2015-02-14 00:21:03

标签: scala recursion immutability tail-recursion

考虑到不可变列表及其在递归函数中的用法,我想知道List是否曾共享内存。例如,

scala> val l = List(1, 2, 3, 4)
l: List[Int] = List(1, 2, 3, 4)

scala> val k = -2 :: -1 :: 0 :: l
k: List[Int] = List(-2, -1, 0, 1, 2, 3, 4)

lk在这里共享任何内存,因此就像切片一样,它们之间的唯一区别是它们指向第一个和最后一个元素的指针,或{{1 }} operator实际上必须克隆列表::

我对此感到好奇,因为如果他们共享任何内存,那么这对于递归函数中的内存和CPU使用不会产生可怕的后果,例如,以{调用自身结束调用{ {1}}或l作为参数?

1 个答案:

答案 0 :(得分:3)

来自Scala文档:

List实现尾部列表的结构共享。这意味着许多操作都是零内存或恒定内存成本。