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

In Scala, do immutable Lists share memory?

想到不可变列表及其在递归函数中的用法,我想知道 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)

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

我对此很好奇,因为如果它们 共享任何内存,那不会对递归函数中的内存和 CPU 使用造成可怕的后果,那,例如,以 list.tailelem :: list 作为参数结束对自己的调用?

来自 Scala 文档:

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