数组变量共享多少信息?

fre*_*low 5 arrays d sharing deep-copy variable-assignment

将一个数组变量分配给另一个数组变量时,复制/共享多少信息?

int[] a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] b = a;
a[0] = 42;
writefln("%s %s", a[0], b[0]);   // 42 42
Run Code Online (Sandbox Code Playgroud)

显然,ab共享相同的有效负载,因为42打印两次.

a ~= 10;
writefln("%s %s", a.length, b.length);   // 11 10
Run Code Online (Sandbox Code Playgroud)

附加a不会改变b,所以长度似乎不是有效载荷的一部分?

b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]);   // 11 42
Run Code Online (Sandbox Code Playgroud)

符合D的实现是否也可以打印42 42?可以b ~= 42覆盖11内部a吗?

那到底什么时候a并且b相互分离?D在后台执行一些COW吗?

Meh*_*dad 7

D中的"数组"并不存在.

切片做.

切片只是一个指针和一个长度.因此,当您将它们分配给彼此时,指针和长度会被复制.如果您修改目标数据,那么它将在切片的所有实例中可见 - 但如果您放大一个切片,另一个切片仍将使用其旧的长度.

您通常无法"缩小"内存中数组的实际长度(尽管您可以减少切片的长度,因此它'看到的'数据更少),因此不会导致问题.

希望能解释发生了什么.