不同类型的浅拷贝 [已解决:别名与复制]
Different types of Shallow copy [SOLVED: aliasing vs copying]
这道题不是解释shallow/deep是如何工作的,而是浅拷贝的例子。
我在做笔记,不知这两个例子都是'fall under the roof'浅拷贝。是的,它们有点不同,但它们都是所谓的 'shallow copies' 吗?代码:
ArrayList<String> colors = new ArrayList<>();
colors.add("Red");
colors.add("Blue");
ArrayList<String> shallowOne = new ArrayList<>(colors);
ArrayList<String> shallowTwo = colors;
ShallowOne 引用了内部 对象颜色的元素。
ShallowTwo 直接引用对象颜色。
所以,他们都在使用著名的浅拷贝概念吗?或者..他们的术语不同?
你给出的第二个例子不是浅拷贝的例子。事实上,没有发生复制:这称为别名。
但是,有些语言并不一定如此。例如,在 Rust 中,如果数据类型已被标记为 Copy
,则在赋值时进行 shallow/deep 复制,否则会发生移动赋值(旧名称不再可用,因此不会发生别名这里也一样)。
这道题不是解释shallow/deep是如何工作的,而是浅拷贝的例子。
我在做笔记,不知这两个例子都是'fall under the roof'浅拷贝。是的,它们有点不同,但它们都是所谓的 'shallow copies' 吗?代码:
ArrayList<String> colors = new ArrayList<>();
colors.add("Red");
colors.add("Blue");
ArrayList<String> shallowOne = new ArrayList<>(colors);
ArrayList<String> shallowTwo = colors;
ShallowOne 引用了内部 对象颜色的元素。
ShallowTwo 直接引用对象颜色。
所以,他们都在使用著名的浅拷贝概念吗?或者..他们的术语不同?
你给出的第二个例子不是浅拷贝的例子。事实上,没有发生复制:这称为别名。
但是,有些语言并不一定如此。例如,在 Rust 中,如果数据类型已被标记为 Copy
,则在赋值时进行 shallow/deep 复制,否则会发生移动赋值(旧名称不再可用,因此不会发生别名这里也一样)。