|
@NotLongNil #50 ,这就不是深浅拷贝的问题。而是切片赋值的索引建立问题。
hello[2..<5] 提取索引 2 、3 、4 的元素也就是 [30, 40, 50],
那么按照正常理解 foo 就是:
foo[0] = 30 (原 hello[2])
foo[1] = 40 (原 hello[3])
foo[2] = 50 (原 hello[4])
对吧?
但是你去修改 foo[2] = 0 ,那么考虑的就是把旧的值 50 赋值成为新的值 0 ,对吧?
那么期望输出的应该就是 [30, 40, 0],但是 swift playground 中输出的是 [0, 40, 50]。
修改的是我们预期中 foo[0] 的值。也就是说 foo = hello[2..<5] 的操作并没有把索引重新编号。
换成 Java 可能会帮助你的理解:
List originalList = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50, 60));
List sliceList = originalList.subList(2, 5);
sliceList.set(2, 0);
System.out.println(sliceList);
这样操作之后结果 sliceList 输出的是 [0, 40, 50] |