List<Int>는 소비자가 그 참조를 통해 어떤 연산을 할 수 있는지 알려 줘요. 실제 컬렉션이 계속 같은 상태로 남는다고 약속하지는 않아요.

호출자가 val owned = mutableListOf(2, 4)를 만들고 List<Int>를 받는 함수에 전달한다고 해 볼게요. 나중에 호출자가 owned에 6을 추가해요. 소비자가 같은 객체를 보관했다면 읽기 전용 인터페이스만으로 이전 상태의 스냅샷이 만들어진 것은 아니에요. val은 owned에 담긴 참조를 고정하지, 리스트의 내용을 고정하지는 않아요.

전달받았을 당시의 값이 필요한 함수라면 별도 복사본을 어디서 만들고 누가 이후의 변경을 막을지 정하겠어요. 호출자가 가진 리스트의 현재 내용을 의도적으로 읽는 함수라면 같은 객체를 공유해도 충분할 수 있어요. 실제 요구사항이 스냅샷이라면 어느 지점에서 만들겠어요?