Сколько информации копируется / передается, когда я присваиваю одну переменную массива другой переменной массива?
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
Очевидно, a
и b
совместно используют одну и ту же полезную нагрузку, потому что 42 печатается дважды.
a ~= 10;
writefln("%s %s", a.length, b.length); // 11 10
Добавление к a
не меняет b
, поэтому длина не является частью полезной нагрузки?
b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]); // 11 42
Может ли соответствующая реализация D также напечатать 42 42
?Может ли b ~= 42
перезаписать 11 внутри a
?
Когда точно a
и b
отделены друг от друга?D выполняет некоторые COW в фоновом режиме?