> 백엔드 개발 > Golang > 원본에 영향을 주지 않고 바둑 지도를 딥 카피하는 방법은 무엇입니까?

원본에 영향을 주지 않고 바둑 지도를 딥 카피하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-25 16:18:11
원래의
217명이 탐색했습니다.

How to Deep Copy a Go Map Without Affecting the Original?

원본을 손상시키지 않고 지도 심층 복사

Go에서 aSuperMap[y] =와 같은 참조를 할당하여 지도 복사를 시도합니다. aMap은 의도하지 않은 결과를 초래할 수 있습니다. 원본에 영향을 주지 않고 연관 맵을 생성하려면 딥 카피가 필요합니다.

문제

제공된 예제에서는 aMap의 내용을 SuperMap에 복사한 다음 지우려고 시도합니다. aMap. 그러나 aMap에서 항목을 삭제하면(delete(aMap, x)) aSuperMap에서도 해당 참조가 제거됩니다. 이로 인해 슈퍼맵에 중복된 데이터가 포함되거나 일관성이 없게 됩니다.

해결책: 딥 카피

사본을 변경할 때 원본 맵을 수정하지 않으려면 딥 카피를 사용하세요. 사용된. for 루프에서:

for k, v := range originalMap {
  newMap[k] = v
}
로그인 후 복사

originalMap의 각 키-값 쌍은 개별적으로 newMap에 복사됩니다. 이 프로세스는 원본에 연결되지 않은 새롭고 독립적인 지도를 만듭니다. 그런 다음 복사본에 영향을 주지 않고 원본 맵을 지울 수 있습니다.

다음 예에서는 맵 전체 복사를 보여줍니다.

originalMap := map[string]int{"one": 1, "two": 2}

// Deep copy originalMap into newMap
newMap := make(map[string]int)
for k, v := range originalMap {
  newMap[k] = v
}

// Clear the original map
originalMap = make(map[string]int)

// Verify that newMap is independent of originalMap
newMap["three"] = 3
fmt.Println(newMap) // {one: 1, two: 2, three: 3}
fmt.Println(originalMap) // {}
로그인 후 복사

In 이 예에서는 깊은 복사를 통해 newMap을 OriginalMap과 독립적으로 수정 및 확장할 수 있으므로 두 맵의 무결성이 유지됩니다.

위 내용은 원본에 영향을 주지 않고 바둑 지도를 딥 카피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿