在Scala中,do不可变列表共享内存



想到不可变列表及其在递归函数中的使用,我想知道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在这里共享任何内存,从而起到类似于切片的作用,其中它们之间的唯一区别是指向第一个和最后一个元素的指针,还是::运算符实际上必须克隆列表l

我对此感到好奇,因为如果它们共享任何内存,这不会对递归函数中的内存和CPU使用产生可怕的后果吗?例如,以list.tailelem :: list作为参数对自己进行调用结束?

来自Scala文档:

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

最新更新