F#类中的属性是否在私有字段中使用了双内存?

Sol*_*lma 1 memory f# class

F#类具有nice属性,参数自动成为不可变的私有字段.如果我想在外部提供一个这样的字段,我可以创建一个属性,如I下面的代码所示:

type MyClass (i: int list) =
    member this.I with get() = i
    member this.foo x = i.Head + x

let mc = MyClass [0..10]
mc.foo 10 // 10
mc.I // [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
Run Code Online (Sandbox Code Playgroud)

I在上面的代码中使用的内存量是否翻了两倍,i或者它只是一个返回值的函数i

(当然,这仅在参数使用大量内存时才有意义,在上面的示例中并非如此)

ild*_*arn 6

否:i被存储为私有字段MyClass; MyClass.I是一个属性,get函数返回所述字段的值.

list<'T> 是一种引用类型,因此将其保留在类中实际上是一个浅表副本,并且不会复制列表中的数据.