[Python 기초] 값의 저장공간, 변수(variable)
업데이트:
개요
1. 변수란?
앞에서 자료형 등에 대해 포스팅하면서 이미 변수라는 개념을 계속 사용해왔다.
a = 1
b = "yganalyst"
c = [1,2,3]
a는 숫자형, b는 문자형, c는 리스트 자료형이다.
그런데 파이썬에서의 변수는 대입된 값이라기 보다는 객체를 가리키는 것
이라는 의미가 가장 적절하다고 할 수 있다.
a = 3
여기서 a는 3이라는 메모리의 위치를 가리키는 변수라는 의미이다.
a = 3
b = 3
a와 b는 개별적인 변수가 아니라 3이라는 객체를 가리키는 변수, 즉 이름만 다르고 같은 변수가 된다.
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
도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.
댓글남기기