보통은 배열은 밸류 타입이고
배열 비슷하지만 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
이런 것들 여러 언어 쓰다보면 자꾸 잊어서 짜증남 ㅠㅠ
ㅇㅇ copy가 따로 있음..
근데 이건 단순히 a = b의 문제가 아니라 인덱싱을 통한 서브어레이 생성의 문제.. a와 a[:]가 같냐 다르냐