인생은 여행 人生は旅

파이썬 - 변수 본문

코딩 공부

파이썬 - 변수

하늘빛 칵테일 2024. 3. 8. 10:03

2023 점프 투 파이썬

02-8 자료형의 값을 저장하는 공간, 변수

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

변수는 어떻게 만들까?

우리는 앞에서 이미 변수를 사용해 왔다. 다음 예와 같은 a, b, c를 ‘변수’라고 한다.

>>> a = 1
>>> b = "python"
>>> c = [1, 2, 3]

변수를 만들 때는 위 예처럼 =(assignment) 기호를 사용한다.

변수_이름 = 변수에_저장할_값

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

변수란?

파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금까지 보아 온 자료형의 데이터(값)와 같은 것을 의미하는 말이다(객체에 대해서는 05-1절에서 자세하게 공부한다).

a = [1, 2, 3]

만약 위 코드처럼 a = [1, 2, 3]이라고 하면 [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)
4303029896
>>> id(b)
4303029896

id(a)의 값이 id(b)의 값과 동일하다는 것을 확인할 수 있다. 즉, a가 가리키는 대상과 b가 가리키는 대상이 동일하다는 것을 알 수 있다. 동일한 객체를 가리키고 있는지에 대해서 판단하는 파이썬 명령어 is를 다음과 같이 실행해도 역시 참을 리턴해 준다.

>>> a is b  # a와 b가 가리키는 객체가 같을까?
True

이제 다음 예를 계속 수행해 보자.

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

a 리스트의 두 번째 요소를 값 4로 바꾸었더니 a만 바뀌는 것이 아니라 b도 똑같이 바뀌었다. 그 이유는 앞에서 살펴본 것처럼 a, b 모두 동일한 리스트를 가리키고 있기 때문이다.

그렇다면 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들 수는 없을까? 다음 2가지 방법이 있다.

1. [:] 이용하기

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

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

위 예에서 볼 수 있듯이 a 리스트 값을 바꾸더라도 b 리스트에는 아무런 영향이 없다.

2. copy 모듈 이용하기

두 번째 방법은 copy 모듈을 사용하는 것이다. 다음 예를 보면 from copy import copy라는 처음 보는 형태의 문장이 나오는데, 이것은 뒤에 설명할 파이썬 모듈 부분에서 자세히 다룬다. 여기에서는 단순히 copy 함수를 쓰기 위해서 사용하는 것이라고만 알아 두자.

>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)

위 예에서 b = copy(a)는 b = 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'

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

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

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

 

자료형을 모두 이해한다면 그 언어의 절반 이상을 터득한 것이다!

저는 아직 터득하지 못했지만 꾸준히 따라가 보겠습니다 :)

'코딩 공부' 카테고리의 다른 글

파이썬 - 조건문 if 2  (0) 2024.03.12
파이썬 - 조건문 if 1  (0) 2024.03.11
파이썬 - 불자료형  (1) 2024.03.07
파이썬 - 집합 자료형  (2) 2024.03.06
파이썬 - 딕셔너리자료형 2(keys,values,get,items,clear)  (0) 2024.03.05