Erlang implementa la copia y modificación de registros de alguna manera inteligente?

dado

-record(foo, {a, b, c}).

Hago algo como esto:

Thing = #foo{a={1,2}, b={3,4}, c={5,6}},
Thing1 = Thing#foo{a={7,8}}.

Desde una vista semántica, Thing y Thing1 son entidades únicas. Sin embargo, desde el punto de vista de la implementación del lenguaje, hacer una copia completa de Thing para generar Thing1 sería un desperdicio intenso. Por ejemplo, si el registro tenía un tamaño de megabyte e hice mil "copias", cada una modificando un par de bytes, acabo de quemar un gigabyte. Si la estructura interna realizaba un seguimiento de una representación de la estructura principal y cada derivada marcaba a esa matriz de una manera que indicaba su propio cambio pero conservaba las versiones de todos los demás, las derivadas podrían crearse con un mínimo de sobrecarga de memoria.

Mi pregunta es esta: ¿Erlang está haciendo algo inteligente, internamente, para mantener la sobrecarga del garabato habitual de Erlang;

Thing = #ridiculously_large_record,
Thing1 = make_modified_copy(Thing),
Thing2 = make_modified_copy(Thing1),
Thing3 = make_modified_copy(Thing2),
Thing4 = make_modified_copy(Thing3),
Thing5 = make_modified_copy(Thing4)

... al mínimo?

Pregunto porque habría una serie de cambios en la forma en que realicé las comunicaciones entre procesos si este fuera el caso.

Respuestas a la pregunta(4)

Su respuesta a la pregunta