面试题答案
一键面试浅拷贝实现方式
在Go语言中,使用copy
函数可以实现切片的浅拷贝。copy
函数用于将源切片的内容复制到目标切片中。其函数签名为:copy(dst, src []Type) int
,它返回实际复制的元素个数。
数据关联特性
浅拷贝后,原切片与新切片共享底层数组。这意味着修改原切片或新切片中元素的值,会影响到对方。但如果对切片进行追加操作,可能会导致切片重新分配内存,从而使它们不再共享底层数组。
代码示例
package main
import (
"fmt"
)
func main() {
originalSlice := []int{1, 2, 3, 4, 5}
newSlice := make([]int, len(originalSlice))
// 进行浅拷贝
copy(newSlice, originalSlice)
fmt.Println("Original Slice:", originalSlice)
fmt.Println("New Slice:", newSlice)
// 修改新切片中的元素
newSlice[0] = 100
fmt.Println("After modifying New Slice:")
fmt.Println("Original Slice:", originalSlice)
fmt.Println("New Slice:", newSlice)
}
在上述代码中:
- 首先创建了一个原切片
originalSlice
。 - 然后使用
make
函数创建了一个与原切片长度相同的新切片newSlice
。 - 通过
copy
函数将原切片的内容复制到新切片中。 - 打印原切片和新切片,此时它们内容相同。
- 修改新切片中的第一个元素,再次打印,可以看到原切片中对应的元素也被修改,这体现了浅拷贝后它们共享底层数组的特性。