考虑到不可变列表及其在递归函数中的用法,我想知道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)
l
和k
在这里共享任何内存,因此就像切片一样,它们之间的唯一区别是它们指向第一个和最后一个元素的指针,或{{1 }} operator实际上必须克隆列表::
?
我对此感到好奇,因为如果他们不共享任何内存,那么这对于递归函数中的内存和CPU使用不会产生可怕的后果,例如,以{调用自身结束调用{ {1}}或l
作为参数?
答案 0 :(得分:3)
来自Scala文档:
List实现尾部列表的结构共享。这意味着许多操作都是零内存或恒定内存成本。