이번 글에서는 변수에 대해서 알아보도록 합시다.
변수
일단 변수란 컴퓨터 프로그래밍에서 어떤 특정한 값을 저장하는 메모리 공간을 이야기합니다.
주로 상자에 많이 비유하기도 하는데, 예를 들어 여러분이 사과 5개를 가지고 있다고 생각해봅시다.
그리고 이 사과를 담을 사과박스가 하나 있습니다.
이때 여러분은 이 사과박스에 사과를 5개 넣을 수도 있고, 2개를 넣을 수도 있고, 사과를 추가해서 10개를 넣을 수도 있습니다.
이렇듯 변수는 한 번 만들어 놓으면 그 내부의 값을 언제든지 여러분이 임의로 변경하고 사용할 수 있는것이 변수입니다.
파이썬에서 변수는 객체를 가리키고 있습니다. 객체는 간단하게 메모리상에 실제로 올려져 있는 데이터라고 생각해두시길 바랍니다.
자 그럼 변수가 객체를 가리킨다는 말이 무슨 말이냐?
여러분이 파이썬에서 어떠한 데이터를 사용하려면 그 데이터는 컴퓨터의 메모리 공간을 할당받고 있어야 합니다.
그때 이 메모리 공간에는 각각 1bit단위로 주소가 정해져 있는데, 변수는 그 메모리 공간의 주소를 가리키고 있는 것입니다.
예를 들어 홍길동이라는 사람이 서울 강남구의 강남아파트 91호에 살고 있다고 생각해봅시다.
이 집의 실제 주소는 서울특별시 강남구 강남아파트 91호입니다.
하지만 홍길동의 가족이나 지인들은 이 집을 '길동이네'라고도 부를 수 있습니다.
이 둘은 이름은 다르지만 실제 가리키고 있는 장소는 똑같습니다.
여기서 홍길동의 집의 실제 주소가 메모리 공간의 주소, '길동이네'가 변수가 되는것입니다.
또한 이러한 메모리 주소는 꼭 하나의 변수와 1:1로 매칭되는 것만은 아닙니다.
홍길동의 옆집은 홍길동의 집을 '옆집'이라고 부를 수도 있고, 아랫집은 '윗집'이라고도 부를 수 있듯이
여러개의 변수가 하나의 메모리 공간을 가리킬 수도 있다는 말입니다.
하지만 반대로 한 개의 변수가 여러개의 메모리 공간을 가리키는것은 불가능합니다.
그럼 이제 실제로 변수를 만들고 데이터를 입력해보도록 합시다.
age = 20
name = "홍길동"
address = "강남아파트 91호"
print("내 이름은 %s이고 %d살 입니다. 나는 %s에 살고 있습니다."%(name, age, address))
이렇게 다양한 값들을 변수에 저장하여 출력할 수 있습니다.
파이썬에서 화면에 출력을 할 때는 print를 사용하는데, 자세한 사용법에 대해서는 추후에 좀 더 자세히 알아보겠습니다.
위에서 하나의 메모리 공간을 여러개의 변수가 가리킬 수 있다고 했는데,
파이썬에서는 sys.getrefcount를 사용해 이 공간(객체)을 몇 개의 변수가 참조했는지 알 수 있으며, 이를 레퍼런스 카운트라고 합니다.
import sys
print(sys.getrefcount(3))
아무 변수도 선언하지 않았는데 count가 31인 이유는 파이썬에서 내부적으로 3을 사용하고 있기 때문입니다.
그렇다면 이 메모리 공간에 올라가 있는 데이터를 없애려면 어떻게 해야할까요?
파이썬에서는 해당 객체를 가리키는 레퍼런스 카운트가 0이 되면 자동으로 그 객체는 사라지게 됩니다.
이를 가비지 컬렉션(Garbage collection)이라고 하며, 파이썬에 기본적으로 내장되어 있는 기능입니다.
또한 변수가 현재 어떠한 객체를 가리키고 있을 때, 그 변수가 아무것도 가리키지 않도록 하기 위해서는
del을 사용해주시면 됩니다.
import sys
print(sys.getrefcount(3))
a = 3
print(a)
del(a)
print(a)
위의 코드를 보면, 처음에 a가 3을 가리키도록 한 뒤 값을 출력하면 3이라는 값이 정상적으로 출력되는데,
del(a)를 실행한 후 다시 출력하려고 하니 a가 아무것도 가리키고 있지 않기 때문에 오류가 발생합니다.
이러한 del을 사용해서 객체를 가리키는 레퍼런스 카운트를 0으로 만들면 그 객체는 사라지게 되는 것입니다.
변수에 대한 설명은 이정도로 마치도록 하겠습니다.
감사합니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
파이썬 6. 문자열 연산 (0) | 2020.09.18 |
---|---|
파이썬 5. 문자열 (0) | 2020.09.18 |
파이썬 4. 자료형 (0) | 2020.09.18 |
파이썬 2. 파이썬 설치하기 (0) | 2020.09.18 |
파이썬 1. 파이썬 개요 (0) | 2020.09.18 |