F#中不可变记录的复制和更新过程是否共享或复制内存?含义,在以下代码中
type MyRecord = {
X: int;
Y: int;
Z: int
}
let myRecord1 = { X = 1; Y = 2; Z = 3; }
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
myRecord1
和myRecord2
共享变量X
的内存?更一般地说,是否有一个很好的引用,它准确表示F#中哪些不可变/持久数据结构主动共享内存?
答案 0 :(得分:10)
在这种情况下,将复制变量X
的内存。代码的最后一行实际上只是另一种写法:
let myRecord2 = { X = myRecord1.X; Y = 100; Z = 2 }
现在,如果X
是引用类型,则引用它的内存将被复制,但其内容的内存将被共享。
例如,考虑一下:
type MyX = { W: int; U: int }
type MyRecord = {
X: MyX;
Y: int;
Z: int
}
let myRecord1 = { X = { W = 5; U = 6 }; Y = 2; Z = 3; }
let myRecord2 = { myRecord1 with Y = 100; Z = 2 }
在上面的代码中,将复制X
的内存,但会共享W
和U
的内存。