数组的深浅拷贝
- 浅拷贝(Shallow Copy): 浅拷贝只是复制了数据结构的引用,而不是复制数据结构本身。这意味着新的数据结构和原始数据结构共享相同的底层数据。如果修改了其中一个数据结构,另一个数据结构也会受到影响。浅拷贝通常是通过直接赋值或者切片操作来实现的。
1 | go复制代码// 浅拷贝示例 |
在上面的示例中,slice2
是 slice1
的浅拷贝,它们共享相同的底层数组。
2. 深拷贝(Deep Copy): 深拷贝会复制整个数据结构,包括其所有的子数据结构,从而创建一个完全独立的副本。这意味着新的数据结构和原始数据结构是完全独立的,彼此不受影响。深拷贝通常需要递归地复制数据结构的所有子结构。
1 | go复制代码// 深拷贝示例 |
在上面的示例中,通过使用 copy
函数将 slice1
的内容复制到了一个新的切片 slice2
中,这样就实现了深拷贝。
结构体的深拷贝
在 Go 中,结构体的深拷贝通常需要手动编写代码来实现,因为结构体的复制通常只是浅拷贝。深拷贝需要递归地复制结构体的所有字段,包括其中包含的其他结构体字段。
以下是一个示例,演示了如何对结构体进行深拷贝:
1 | go复制代码package main |
在上面的示例中,我们定义了一个 Person
结构体和一个 Address
结构体。然后,我们实现了一个名为 DeepCopy
的函数,用于对结构体进行深拷贝。该函数使用了反射来处理结构体的字段,对字段进行递归的深拷贝。最后,我们创建了一个原始结构体 person1
,并通过 DeepCopy
函数对其进行了深拷贝,得到了 person2
。通过打印结果,我们可以看到原始结构体和深拷贝后的结构体是独立的,彼此不受影响。
本文转载自: 掘金