MST

星途 面试题库

面试题:Go语言中如何实现切片的深拷贝

在Go语言中,给定一个切片 `source := []int{1, 2, 3}`,请编写代码将其深拷贝到另一个切片 `target` 中。并解释为什么这样做可以实现深拷贝,以及如果使用简单的赋值方式会有什么问题。
22.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 代码实现深拷贝
package main

import (
    "fmt"
)

func main() {
    source := []int{1, 2, 3}
    target := make([]int, len(source))
    copy(target, source)
    fmt.Println(target)
}
  1. 深拷贝原理解释
    • 使用 make 函数创建了一个新的切片 target,其长度和 source 相同。
    • 然后使用 copy 函数将 source 中的元素逐个复制到 target 中。这样 targetsource 虽然元素值相同,但它们在内存中是不同的存储位置,实现了深拷贝。
  2. 简单赋值问题
    • 如果使用简单赋值方式,例如 target := source,这只是将 source 的切片头(包含指向底层数组的指针、长度和容量信息)赋值给了 target。实际上 targetsource 指向的是同一个底层数组。
    • 当对 targetsource 中的任何一个切片进行元素修改时,另一个切片也会受到影响,因为它们共享底层数组,这不是深拷贝的效果。