🔍QA & TEST/🧑🏻‍💻Python

[Python] 기초 : 변수 (자료형의 값을 저장하는 공간)

siwoobyeol 2024. 7. 14. 21:00

변수

프로그래밍 초보자가 쉽게 이해하기 어려울 수 있는 부분이므로 당장 이해되지 않는다면 그냥 읽고 지나가도 된다. 파이썬에 대해서 공부하다보면 자연스럽게 알게 될 것이다.

변수는 어떻게 만들까?

# 다음 예와 같은 a, b, c를 '변술'라고 한다.
>>> a = 1
>>> b = "python"
>>> c = [1, 2, 3]

# 변수를 만들 때는 위 예처럼 =(assignment) 기호를 사용한다.
변수_이름 = 변수에_저장할_값

# 다른 프로그래밍 언어 C나 JAVA에서는 변수를 만들 때 자료형의 타입을 직접 지정해야 한다.
# 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형의 타입을 지정하기 때문에 더 편리하다.

변수란?

파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다.

객체란 우리가 지금까지 보아 온 자료형의 데이터(값)와 같은 것을 의미하는 말이다. (객체에 대해서는 차후 자세히)

# a = [1, 2, 3]이라고 하면 [1, 2, 3] 값을 가지는 리스트 데이터(객체)가 자동으로 메모리에 생성되고
# 변수 a는 [1, 2, 3] 리스트가 지정된 메모리의 주소를 가리키게 된다.
a = [1, 2, 3]
메모리란 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간을 말한다.

 

a 변수가 가리키는 메모리의 주소는 다음과 같이 확인할 수 있다.

>>> a = [1, 2, 3]
>>> id(a)
4303029896

 

id는 변수가 가리키고 있는 객체의 주소 값을 리턴하는 파이썬의 내장 함수이다.

즉, 여기에서 필자가 만든 변수 a가 가리키는 [1, 2, 3] 리스트의 주소 값은 4303029896이라는 것을 알 수 있다.

리스트를 복사하고자 할 때

이번에는 리스트 자료형에서 가장 혼동하기 쉬운 '복사'에 대해 설명한다.

다음 예를 통해 알아보자.

>>> a = [1, 2, 3]
>>> b = a

# b 변수에 a 변수를 대입하면 어떻게 될까?
# b와 a는 같은 걸까, 다른 걸까?
# 결론부터 말하면 b는 a와 완전히 동일하다고 할 수 있다.
# 다만 [1, 2, 3]이라는 리스트 객체를 참조하는 변수가 a 변수 1개에서 b 변수가 추가되어 2개로 늘어났다는 차이만 있을 뿐이다.

# id 함수를 사용하면 이러한 사실을 확인할 수 있다.
# id(a)의 값이 id(b)의 값과 동일하다는 것을 확인할 수 있다.
# 즉, a가 가리키는 대상과 b가 가리키는 대상이 동일하다는 것을 알 수 있다.
>>> id(a)
4303029896
>>> id(b)
4303029896

# 동일한 객체를 가리키고 있는지에 대해서 판단하는 파이썬 명령어 is를 다음과 같이 실행해도 역시 참을 리턴해 준다.
>>> a is b  # a와 b가 가리키는 객체가 같을까?
True

# 다음 예를 계속 수행해 보자.
# a 리스트의 두 번째 요소를 값 4로 바꾸었더니 a만 바뀌는 것이 아니라 b도 똑같이 바뀌었다.
# 그 이유는 앞에서 살펴본 것처럼 a, b 모두 동일한 리스트를 가리키고 있기 때문이다.
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]
# 그렇다면 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들 수 없을까?
# 다음 2가지 방법이 있다.

1. [:] 이용하기

첫 번째 방법은 다음과 같이 리스트 전체를 가리키는 [:]를 사용해서 복사하는 것이다.

# a리스트 값을 바꾸더라도 b 리스트에는 아무런 영향이 없다.
>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]

2. copy 모듈 이용하기

두 번째 방법은 copy 모듈을 사용하는 것이다.

from copy import copy 처음 보는 문장이 나오는데, 이것은 뒤에 설명할 파이썬 모듈 부분에서 자세히 다룬다.

단순히 copy 함수를 쓰기 위해서 사용하는 것이라고만 알아 두자.

# b = copy(a)는 b = a[:]과 동일하다.
>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)

# 두 변수의 값은 같지만, 서로 다른 객체를 가리키고 있는지 다음과 같이 확인해 보자.
>>> b is a
False
# b is a가 False를 리턴하므로 b와 a가 가리키는 객체는 서로 다르다는 것을 알 수 있다.
copy 함수 사용하기
리스트 자료형의 자체 함수인 copy 함수를 사용해도 copy 모듈을 사용하는 것과 동일한 결과를 얻을 수 있다.
>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b is a
False​

변수를 만드는 여러 가지 방법

다음과 같이 튜플로 a, b에 값을 대입할 수 있다.

>>> a, b = ('python', 'life')

 

이 방법은 다음 예문과 완전히 동일하다.

>>> (a, b) = 'python', 'life'
# 튜플 부분에서도 언급했지만, 튜플은 괄호를 생략해도 된다.

 

다음처럼 리스트로 변수를 만들 수도 있다.

>>> [a, b] = ['python', 'life']

 

또한 여러 개의 변수에 같은 값을 대입할 수도 있다.

>>> a = b = 'python'

 

파이썬에서는 위 방법을 사용하여 두 변수의 값을 매우 간단하게 바꿀 수 있다.

>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3

# 처음에 a에 값 3, b에는 5에 대입되어 있었지만 
# a, b = b, a 문장을 수행한 후에는 그 값이 서로 바뀌었다는 것을 확인할 수 있다.

 

출처 : https://wikidocs.net/18