是否复制和更新F#中的不可变记录类型共享或复制内存?

时间:2015-03-27 03:02:51

标签: .net f# functional-programming

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 }

myRecord1myRecord2共享变量X的内存?更一般地说,是否有一个很好的引用,它准确表示F#中哪些不可变/持久数据结构主动共享内存?

1 个答案:

答案 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的内存,但会共享WU的内存。