MST

星途 面试题库

面试题:Go语言中切片浅拷贝的实现及特性

请阐述在Go语言中如何实现切片的浅拷贝,并说明浅拷贝后原切片与新切片之间数据的关联特性,同时给出相应的代码示例。
42.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

浅拷贝实现方式

在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)
}

在上述代码中:

  1. 首先创建了一个原切片originalSlice
  2. 然后使用make函数创建了一个与原切片长度相同的新切片newSlice
  3. 通过copy函数将原切片的内容复制到新切片中。
  4. 打印原切片和新切片,此时它们内容相同。
  5. 修改新切片中的第一个元素,再次打印,可以看到原切片中对应的元素也被修改,这体现了浅拷贝后它们共享底层数组的特性。