[Python 기초] 값의 저장공간, 변수(variable)

업데이트:

개요

jpg


1. 변수란?

앞에서 자료형 등에 대해 포스팅하면서 이미 변수라는 개념을 계속 사용해왔다.

a = 1
b = "yganalyst"
c = [1,2,3]

a는 숫자형, b는 문자형, c는 리스트 자료형이다.
그런데 파이썬에서의 변수는 대입된 값이라기 보다는 객체를 가리키는 것이라는 의미가 가장 적절하다고 할 수 있다.

a = 3

여기서 a는 3이라는 메모리의 위치를 가리키는 변수라는 의미이다.

a = 3
b = 3

a와 b는 개별적인 변수가 아니라 3이라는 객체를 가리키는 변수, 즉 이름만 다르고 같은 변수가 된다.
jpg

R에서는 a <- 3 b <- 3 을 통해 변수를 입력한다. 그러나 a와 b는 가리킨다는 의미보다는 가진 값은 같지만 다른 변수이다.


2. R과 python의 차이를 유의하자.

파이썬의 이러한 변수 특징을 인지하지 못하면 데이터를 잃거나 작업 중 오류를 범할 수 있다.
그 예로 리스트 자료형을 보자.

a = [1,2,3]
b = a
print(a)
print(b)
[Output] [1, 2, 3]
	 [1, 2, 3]

a와 b는 동일한 리스트 [1,2,3]을 가리킨다.

a[0] = 100
print(a)
print(b)
[Output] [100, 2, 3]
	 [100, 2, 3]

핵심적인 부분이다. a를 변경(a의 첫번째 요소를 100으로 변경)하면 b도 같이 변하는 것을 알 수 있다. 이는 a와 b가 같이 가리키고 있던 리스트(값)가 변했기 때문이다. 따라서 단지 a = b의 명령으로 복사본을 만들면 안된다는 것이다.

하지만 R에서는 개별 변수로 인식하기 때문에 가능하다.


3. 복사하려면?

그래도 복사본을 만드는 방법은 있다.

  • 리스트를 복사할 때
a = [1,2,3]
b = a[:]

[:]은 리스트의 전 범위를 의미한다.

a[0] = 100
print(a)
print(b)
[Output] [100, 2, 3]
	 [1, 2, 3]

확인해 보면 a의 요소가 변해도 b는 변하지 않는 것을 확인할 수 있다.

  • copy 모듈을 이용한 방법
from copy import copy
a = [1,2,3]
b = copy(a)

마찬가지의 결과이다. 이는 리스트 자료형이 아닐경우에도 사용이 가능하다.


4. 변수 확인 방법

서로 동일한 객체를 가리키는지 아닌지 확인해보는 것도 좋다.

b is a
[Output] False
  • 기타) 변수지우기(del)
del(a)
del(b)


Reference

도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.

댓글남기기