然後,如果結構中沒有指針,直接賦值就是深度復制;
如果結構中包含指針(包括用戶自定義指針和使用指針的slice、map等內置類型),那麽數據源和副本之間對應的指針會* * *指向同壹個內存,所以深度復制需要特殊處理。因為值傳遞只是復制指針。
地圖源代碼:
/golang/go/blob/a7 ACF 9 af 07 BDC 288129 fa 5756768 b 41f 312d 05 f 4/src/runtime/map . go
map的兩個最重要的結構:hmap和bmap。
其中,hmap在哈希表中扮演數組的角色,bmap扮演鏈表的角色。
其中,單桶是壹個叫做bmap的結構。
每個桶包含多達8個鍵/元素對。
並且散列的低階比特被用來選擇桶。每個桶包含每個散列的幾個高位,以區分單個桶中的條目。
哈希值的低位用於定位桶,高位用於定位桶內的鍵。
根據上面bmap和/golang/go/blob/go 1.13.8/src/cmd/compile/internal/GC/reflect . go的評論,
我們可以推斷出bmap的結構實際上是
註意:在hash桶中,鍵值不是相鄰排列的,而是把鍵放在壹起,把值放在壹起,以減少鍵值不同帶來的不必要的內存對齊。
比如map[int64]int8,如果key/elem/key/elem是這樣存儲的,那麽int8類型的值會用7字節***56bits填充。
了解更多信息。
/p/406751292
/articles/32943
因此,切片和貼圖作為參數傳遞給函數參數,函數中的更改將影響原始切片和貼圖。