불변의 컬렉션에 적용되는 스칼라 컬렉션 작업은 구조 공유로 인해 이전 구조의 많은 부분을 공유하는 새 컬렉션을 반환합니다.변경 가능한 모음에 대한 불규칙한 작업 스칼라
내 질문은 : 이러한 작업은 또한 새로운 구조를 반환하는 가변 데이터 구조에 적용될 수 있다는 점을 고려하면 불변의 컬렉션에 대한 구조적 공유가 적절하게 이루어지고 있습니까?
불변의 컬렉션에 적용되는 스칼라 컬렉션 작업은 구조 공유로 인해 이전 구조의 많은 부분을 공유하는 새 컬렉션을 반환합니다.변경 가능한 모음에 대한 불규칙한 작업 스칼라
내 질문은 : 이러한 작업은 또한 새로운 구조를 반환하는 가변 데이터 구조에 적용될 수 있다는 점을 고려하면 불변의 컬렉션에 대한 구조적 공유가 적절하게 이루어지고 있습니까?
아니요, 구조 공유는 공유되는 부품이 절대 변경되지 않을 때만 가능합니다. 예를 들어, 불변의리스트를 가져옵니다. prepend가 원래의 요소를 제외한 모든 요소를 공유하는 목록을 반환하는 것이 안전 한 이유는 원래 요소가 절대로 변경되지 않는다는 것입니다. 이 보장이 적절하지 않은 경우, 전치 방법은 원본 목록을 변경하여 새 목록에 영향을 미치지 않도록 전체 목록을 복사해야합니다. 변경 가능한 모음의 경우이 보증은 제공되지 않으므로 (원래 모음이 실제로 변경 될 수 있으므로) 변경 가능한 모음은 구조 공유를 사용할 수 없습니다.
아니요. 이러한 공유는 수정 된 내용으로 새 개체를 반환하고 새 개체가 수정 될 때 원본 모음을 수정하지 않기 때문에 불가능합니다. 불변성은 다른 객체가 변경 될 때 한 객체를 변경할 위험을 없애기 때문에 공유 구조는 변경 불가능한 컬렉션에서만 잘 작동합니다.
물론 콘텐츠 수준에서 공유가 있습니다. mutable.List[String]
에서 새 목록은 원본과 동일한 String
인스턴스에 대한 참조를 사용하지만 그것이 끝나는 곳입니다.