6.5 변수에 변수 할당하기

지금까지는 변수에 값을 할당했는데, 변수에는 값뿐만 아니라 다른 변수도 할당할 수 있습니다.

>>> x = 10
>>> y = x
>>> y
10

x에는 10이 들어있고, yx를 할당했으므로 y의 값을 출력해보면 10이 나옵니다.

변수 여러 개에 변수를 각각 할당할 수도 있습니다.

>>> a, b = 10, 20
>>> x, y = a, b
>>> x
10
>>> y
20

x는 10, y는 20이 나왔습니다. 이렇게 변수를 ,(콤마)로 구분한 뒤 각 변수에 할당될 변수를 지정해주면 됩니다.

그럼 두 변수의 값을 바꾸려면 어떻게 해야 할까요? 다음과 같이 변수 여러 개에 변수를 할당할 때 자리를 바꿔주면 됩니다.

>>> x = 10
>>> y = 20
>>> x, y = y, x
>>> x
20
>>> y
10

x는 20, y는 10이 나왔습니다. 이처럼 변수1, 변수2 = 변수2, 변수1 형식으로 두 변수의 값을 바꿀 수 있습니다.

지금까지 변수를 만들고 사용해보았습니다. 변수는 값이나 계산 결과를 저장할 때 사용한다는 점과 변수를 만드는 방법, 변수 이름을 짓는 방법만 기억하면 됩니다.

참고 | 변수 삭제하기

변수 삭제는 del을 사용합니다.

del 변수

>>> x = 10
>>> del x
>>> x
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    x
NameError: name 'x' is not defined
>>> 

지금은 변수 삭제가 큰 의미가 없지만 나중에 리스트를 사용할 때 del이 유용하게 쓰입니다.

참고 | 변수에 값이 저장되는 방식

파이썬은 값 자체도 객체입니다. 그래서 변수에 값을 그대로 저장하지 않고 객체를 가리키는 방식을 사용합니다(C 언어처럼 오래 전에 나온 언어는 변수에 값을 그대로 저장합니다).

예를 들어서 다음과 같이 xy에 1000을 할당했다면 xy는 단지 1000이라는 객체를 가리킬 뿐입니다.

>>> x = 1000
>>> y = 1000

정말 그런지 확인해보겠습니다. sys.getrefcount 함수를 사용하면 현재 객체가 몇 번 사용되었는지 확인할 수 있습니다(객체를 사용(참조)한 횟수를 레퍼런스 카운트(reference count)라고 부릅니다).

refcount.py

import sys
print(sys.getrefcount(1000))    # 2: 처음 레퍼런스 카운트는 2
 
x = 1000                        # x에 1000을 저장
print(sys.getrefcount(1000))    # 3: 1000을 한 번 사용하여 레퍼런스 카운트 1 증가
 
y = 1000                        # y에 1000을 저장
print(sys.getrefcount(1000))    # 4: 1000을 한 번 사용하여 레퍼런스 카운트 1 증가
 
print(x is y)    # True: x와 y가 같은 객체를 가리키고 있으므로 True가 나옴

변수를 선언해서 1000을 사용할 때마다 sys.getrefcount의 결과가 1씩 증가합니다. 여기서 맨 처음에 sys.getrefcount(1000)를 실행했을 때 0이 아닌 2가 나오는 이유는 sys.getrefcount를 호출하면서 내부적으로 1000을 두 번 사용했기 때문입니다. 1, 2처럼 흔한 숫자를 넣어보면 훨씬 많은 값이 나옵니다. 왜냐하면 파이썬 내부에서도 1, 2를 사용하고 있기 때문입니다.

그리고 객체가 같은지 판단하는 연산자인 is를 사용해보면 True가 나옵니다. 즉, xy는 같은 객체를 가리키고 있습니다.