파이썬의 변수
Language/Python

파이썬의 변수

변수 할당

다른 언어의 경우 변수를 사용하기 위해서 미리 선언하고 정의해야 합니다. 파이썬의 경우 이러한 과정은 필요 없습니다.

>>> n = 300

위 코드는 "변수 n에 300을 할당"이라고 해석합니다. 이런 식으로 파이썬은 변수에 값을 바로 할당하여 사용할 수 있습니다.

 

변수 타입

다른 언어의 경우 한번 선언된 변수의 타입을 사용이 끝날 때까지 지켜야 합니다. 하지만 파이썬의 경우 언제든지 다른 타입을 변수에 할당할 수 있습니다.

>>> var = 23.5
>>> print(var)
23.5						# int

>>> var = "Now I'm a string"
>>> print(var)
Now I'm a string				# str

 

객체 참조

파이썬은 모든 변수가 객체입니다.

>>> print(300)
300

이러한 코드를 수행했을 때, 인터프리터는 아래와 같이 수행합니다.

  1. 정수 객체를 생성
  2. 객체에 값 300을 부여
  3. 콘솔에 표시

type() 함수를 사용하면 정수 객체가 생성된 것을 볼 수 있습니다.

>>> type(300)
<class 'int'>

파이썬에서 변수는 객체에 대한 포인터 역할을 합니다. 아래에 예시를 들어보겠습니다.

>>> n = 300

변수 할당

값 300으로 정수 객체를 생성한 뒤, 변수 n이 해당 객체를 가리키도록 합니다.

>>> m = n

만약, 이런 식으로 변수 m에 변수 n을 할당하면 어떻게 될까요?

단일 객체에 대한 다중 참조

하나의 정수 객체 300을 m과 n이 동시에 가리키고 있습니다.

>>> m = 400

이 상황에서 m에 새로운 정수 객체 400을 할당하면 아래와 같이 새로운 객체가 생겨나고, 이를 m이 가리킵니다.

개별 객체에 대한 참조

이번엔 n이 새로운 객체를 가리키도록 해보겠습니다.

>>> n = "foo"

포인터가 없는 객체

정수 객체 300은 포인터가 없어 액세스 할 수 없습니다. 이렇게 참조 수가 0이 된 객체는 더 이상 접근할 수 없음을 파이썬이 알아차리고 할당된 메모리를 회수하여 효율적으로 메모리를 사용할 수 있게 해 줍니다. 이를 가비지 컬렉션이라고 합니다.

 

객체 아이덴티티

파이썬은 생성되는 모든 객체에 고유하게 식별할 수 있는 번호가 부여됩니다. 수명이 겹치는 기간 동안 두 객체가 동일한 식별자를 갖지 않도록 보장됩니다. 그래서 앞서 보았던 가비지 컬렉션 현상이 일어나면 해당 식별 번호를 다시 사용할 수 있습니다. 이러한 식별 번호는 id() 함수로 확인 가능합니다. id() 함수는 객체의 식별자 번호를 반환합니다.

※ CPython의 경우 식별자 번호가 메모리 주소를 의미합니다.

>>> n = 300
>>> m = n
>>> id(n)
60127840
>>> id(m)
60127840

>>> m = 400
>>> id(m)
60127872

id() 함수를 통해 두 변수가 동일한 객체를 가리키는 것을 확인할 수 있습니다. 또한, m이 가리키는 객체가 달라지면 식별 번호도 바뀌는 것을 확인할 수 있습니다.

 

일부 정수 값 캐싱

파이썬은 최적화를 위해 [-5, 256] 범위의 정수에 대한 객체의 식별 번호를 미리 정해놓습니다. 따라서 이 범위의 정수 값에 별도의 변수를 할당하면 동일한 식별 번호가 할당됩니다.

>>> m = 300
>>> n = 300
>>> id(m)
60062304
>>> id(n)
60062896

>>> m = 30
>>> n = 30
>>> id(m)
1405569120
>>> id(n)
1405569120

'Language > Python' 카테고리의 다른 글

네이밍 컨벤션  (0) 2022.05.04
map object  (0) 2021.09.02