问题
append是一个内置函数,用来在指定的slice后面添加1个或多个元素,并且返回一个新的slice。我们知道,每个slice在底层都有一个数组作为支撑,那么如果在append之后,如果修改了返回的slice,原数组的元素是否也会一起改动呢?
分析
这个问题的答案是:也许
为什么呢?这就要从append函数的实现来看了。如果slice的底层数组有足够的空间,那么append函数被调用以后,并不会为新返回的slice分配一个新的数组,而是使用原来的数组。这样的话,当改动了新返回的slice以后,原数组也会发生相应的改变。
那么,如果原数组中没有足够的空间的情况下,就会分配一个新的数组,那么再对slice做的任何改变,都与原数组没有关系了,如下面的代码所示。
有疑问加站长微信联系(非本文作者)