当前位置: 首页 > news >正文

wordpress数据库修改主题seo体系网站的建设及优化

wordpress数据库修改主题,seo体系网站的建设及优化,手机网站弹出导航菜单,如何常看wordpress默认编辑器切片的深拷贝和浅拷贝有什么区别 在 Go 语言中,切片的深拷贝和浅拷贝主要区别在于是否复制底层数组: 1. 浅拷贝(Shallow Copy) ● 特点: 只复制切片结构体(array 指针、len、cap),不…

切片的深拷贝和浅拷贝有什么区别

在 Go 语言中,切片的深拷贝和浅拷贝主要区别在于是否复制底层数组:

1. 浅拷贝(Shallow Copy)

特点: 只复制切片结构体(array 指针、len、cap),不复制底层数组,新切片与原切片共享同一块底层内存。

修改影响: 修改新切片或原切片的元素会相互影响(因为共享底层数组)。

实现方式:
○ 直接赋值(s2 := s1)
○ 切片截取(s2 := s1[low:high])

示例:

s1 := []int{1, 2, 3}
s2 := s1         // 浅拷贝:共享底层数组
s2[0] = 100      // 修改s2会影响s1
fmt.Println(s1)  // 输出 [100 2 3]
fmt.Println(s2)  // 输出 [100 2 3]

2. 深拷贝(Deep Copy)

特点: 不仅复制切片结构体,还会创建新的底层数组,并将原数组的元素逐个复制到新数组中,新切片与原切片完全独立。

修改影响: 修改新切片或原切片的元素不会相互影响(底层数组分离)。

实现方式:
○ 使用 copy 函数(需先创建目标切片)
○ 手动遍历赋值

示例1:使用 copy 函数

s1 := []int{1, 2, 3}
s2 := make([]int, len(s1))  // 创建与s1长度相同的新切片
copy(s2, s1)                // 深拷贝:复制元素到新数组s2[0] = 100                 // 修改s2不影响s1
fmt.Println(s1)             // 输出 [1 2 3]
fmt.Println(s2)             // 输出 [100 2 3]

示例2:手动遍历赋值

s1 := []int{1, 2, 3}
s2 := make([]int, 0, len(s1))
for _, v := range s1 {s2 = append(s2, v)  // 逐个复制元素到新切片
}s2[0] = 100
fmt.Println(s1)  // 输出 [1 2 3]
fmt.Println(s2)  // 输出 [100 2 3]

总结

在这里插入图片描述
实际开发中,若需完全独立的切片(避免修改相互影响),应使用深拷贝;若仅需共享数据(节省内存),可使用浅拷贝,但需注意共享带来的副作用。

延展

有两个切片s1和s2,两个切片中都有元素,copy(s1,s2),那么s2中的元素会覆盖s1中的元素吗?

在 Go 中,copy(dst, src) 函数的作用是将源切片(src)中的元素复制到目标切片(dst)中,会覆盖目标切片(s1)中对应位置的元素,但有以下重要特性:

  1. 复制数量取决于两者长度的最小值
    实际复制的元素个数是 min(len(dst), len(src))。例如:
    ○ 若 s1 长度为 3,s2 长度为 5,则只会复制 s2 的前 3 个元素到 s1
    ○ 若 s1 长度为 5,s2 长度为 3,则只会复制 s2 的 3 个元素到 s1 的前 3 个位置,s1 剩余元素不变
  2. 不会改变目标切片的长度
    copy 函数不会扩容目标切片,只会覆盖已有位置的元素。

示例代码:

package mainimport "fmt"func main() {s1 := []int{1, 2, 3, 4} // 长度为4s2 := []int{5, 6, 7}    // 长度为3// 复制s2到s1,实际复制3个元素copy(s1, s2)fmt.Println(s1) // 输出: [5 6 7 4](前3个元素被覆盖,第4个元素保留)fmt.Println(s2) // 输出: [5 6 7](源切片不受影响)
}

总结:

copy(s1, s2) 会用 s2 的元素覆盖 s1 中对应位置的元素,但仅覆盖与 s2 长度相当的部分(或 s1 的全部长度,取较小者),s1 中未被覆盖的元素会保留,s2 本身不会被修改。

slice截取后的len和cap

func main() {s1 := make([]int, 10)for i := 0; i < 10; i++ {s1[i] = i}fmt.Println(s1)s2 := s1[1:]fmt.Println(s2)
}

以上代码中,切片s1和s2的len和cap分别是多少?

在这段代码中,切片 s1 和 s2 的 len(长度)和 cap(容量)分别如下:

  1. 切片 s1:
    ○ 通过 make([]int, 10) 创建,未指定容量参数,因此容量默认与长度相同。
    ○ len(s1) = 10(初始化了10个元素)
    ○ cap(s1) = 10(底层数组的总容量为10)
  2. 切片 s2:
    ○ 通过 s1[1:] 截取创建,等价于 s1[1:len(s1)](即从索引1截取到末尾)。
    ○ 截取规则:新切片的长度 = 终止索引 - 起始索引(10 - 1 = 9)。
    ○ 截取规则:新切片的容量 = 原切片容量 - 起始索引(10 - 1 = 9)。
    ○ 因此:
    ■ len(s2) = 9(包含元素 [1,2,3,4,5,6,7,8,9])
    ■ cap(s2) = 9(与原切片 s1 共享底层数组,剩余可用容量为9)

总结:

● s1:len=10,cap=10
● s2:len=9,cap=9

http://www.dtcms.com/a/606127.html

相关文章:

  • 批量更新 JAR 内配置文件的通用 Bash 脚本
  • 第四十一篇:正则表达式(Regex)终极指南:语法、re模块与实战案例
  • 建设网站用新域名还是老域名网络热词2022
  • 人称代词和物主代词
  • 16、alertmanager告警路由
  • Prim 与 Kruskal 算法在最小生成树中的应用
  • php视频网站开发实战企业怎么做app网址
  • redis不能获取连接,Could not get a resource from the pool
  • 做百度推广网站咱们做春节网页制作素材
  • Oracle 中的物理备份
  • 做服装网站需要什么条件3d模拟装修设计软件
  • 如何在手机上开自己的网站建行app怎么注册登录
  • 跨平台Hybrid App开发实战指南
  • 网站开发struts瑞昌网络推广
  • winfrom 自定义空间 ,UcCustomDataGridView
  • Spring Boot环境配置
  • 新版Xsens Link可穿戴式动捕设备
  • 淘客网站如何做推广莱芜网站建设案例
  • Linux 上怎么跑 Python 脚本
  • 微服务污点分析
  • 科学小制作 小发明 简单 手工网站seo策划方案
  • 手搓UEFI.h
  • MySQL(六) - 视图管理
  • R语言在线编译器 | 提供快速便捷的编程环境,助力数据分析与学习
  • 网站没有备案是假的吗什么是大型门户网站
  • 做电脑网站与手机上的一样吗网站建设维护需要懂哪些知识
  • UE5 PAK 封包 加载实用方法
  • UE5蓝图实现物体自动沿样条线运动
  • 基于Fovea算法的AI机械手目标检测模型详解
  • 十大景观设计网站上海有名的设计工作室