메모리와 주소

hyowon·2023년 9월 16일

ComputerScience

목록 보기
1/4

메모리 (Random Access Memory)

메모리는 인간의 단기 기억에 비유된다.

메모리는 스토리지와 대조되는 개념으로, 쉽게 접근 가능하지만 영구적으로 저장되지 않는 저장 공간을 얘기한다. 메모리는 정보를 저장할 수 있는 일종의 긴 띠의 모양이다. 그리고 그 긴 띠에 몇 칸씩 정보가 저장되어 있다.

주소

메모리에 저장된 정보에 접근하기 위해서는 주소가 필요하다.

가리키는 것이 같으면, 메모리 주소도 같다.

A = 9
B = 9
print(id(A) == id(B)) # True

A = 10
print(id(A) == id(B)) # False

많은 사람들이 오해하고 있는 지점이다.

변수 자체가 메모리를 차지한다고 생각하여 변수를 다르게 설정하는 것이 메모리를 낭비하는 것이라고 생각한다. 또 LEGB를 생각해서, '어차피 LEGB rule이 있으니까 메모리를 아낄 겸 같은 변수명을 써버리자' 라고 생각하기도 한다. 그러나 이것은 틀렸다.

변수를 다르게 지정해도, 가리키는 값이 같으면 주소는 같다. 즉 메모리를 재할당하지 않는다.

shallow copy

listA = [1, 2, 3]
listB = listA

print(id(listA) == id(listB)) # True

이렇게 listB는 shallow copy되어 listA (참조 데이터)가 저장한 메모리 주소 값을 복사하여 listA와 같은 주소를 가진다. listB를 수정하면 listA에 영향이 간다.

deep copy

listA = [1, 2, 3]
listC = listA[:]

print(id(listA) == id(listC)) # False

deep copy는 shallow copy와 다르게 값을 복사하여 새로운 메모리 공간에 할당하는 것을 말한다. listC를 수정해도 listA에 영향이 가지 않는다. 그들은 다른 주소값을 가지고 있기 때문이다.

profile
인생을 즐겁게

0개의 댓글