보통은 배열은 밸류 타입이고

배열 비슷하지만 mutable한게 레퍼런스 타입인 경우가 많은데

암튼 실수하지 않게 신경써야 하고

(특히 a = b = c 같은 형태 조심해야 하고)


더 짜증나는 건 인덱싱을 통해 서브어레이 같은 걸 생성해냈을 때...


예를 들어 파이썬에서 리스트는 레퍼런스 타입이고, 거기서 잘라내 만든 서브 리스트도 레퍼런스 타입이면서, 같은 메모리를 공유하지 않음


a = [0, 1, 2, 3]

b = a[:] // a[:2]이어도 되고 아무튼 a의 부분집합

b[0] = 99

print(a[0])              # 0


그런데 거의 같은 행동을 하는 고의 슬라이스는 다름

슬라이스도 레퍼런스 타입이고, 서브 슬라이스도 당연히 레퍼런스 타입이면서, 메모리를 공유함


a := []int{0, 1, 2, 3}

b := a[:] // a[:2]이어도 되고 아무튼 a의 부분집합

b[0] = 99

fmt.Println(a[0])       # 99


이런 것들 여러 언어 쓰다보면 자꾸 잊어서 짜증남 ㅠㅠ