Priv's Blog
4. Python 변수 본문
1. 두 값 교환하기
들어가기에 앞서 이전에 살펴보았던 두 변수의 값을 교환하는 과정을 다시 살펴본다.
python에서 제공하는 튜플(tuple)을 사용한 방식과 임시 변수를 사용한 방식의 비교이다.
이번 파트에서는 python에서 이처럼 매우 간편한 작업이 어떻게 가능한지에 대해서 살펴본다.
2. python의 변수
python에서는 모든 데이터, 함수, 클래스, 모듈, 패키지 등의 구성 요소들을 객체(object)로 취급한다.
객체는 자료형을 가지며, 메모리 공간을 차지한다.
이는 다시 말해, python의 변수는 값을 가지지 않는다는 것을 의미한다.
일반적으로 다른 언어에서는 변수에 값을 '대입'한다고 표현한다.
이는 변수의 자료형에 따라 정해진 메모리 공간이 할당되고, 그 주소 공간에 사용자가 대입한 값이 저장된다는 것이다.
하지만 python에서는 모든 요소들이 객체로 이루어져 있기 때문에 변수 또한 '대입'이 아닌, '포인터'의 개념으로 접근해야 한다.
즉, python의 = 는 메모리 상의 객체와 참조하는 이름을 결합(binding)하는 역할을 한다.
내용을 정리하자면, 아래의 코드는 "변수 a는 정수형 데이터 4를 가리킨다."라고 해석해야 된다는 것이다.
a = 4
모든 객체는 앞서 언급했듯이 메모리를 차지하며, 자료형뿐만 아니라 객체 식별 번호(id: identity)를 가진다.
변수에 값을 대입하면, 값이 아니라 값을 참조하는 객체의 식별 번호가 변경된다.
이처럼 python에서는 변수에 값을 할당하는 과정이 일종의 포인터 개념으로 구성되어 있기 때문에 구조상 변수의 자료형을 굳이 수동으로 정의해줄 필요가 없다.
다들 알다시피 python에서는 변수를 선언할 때 자료형을 선언하지 않아도 변수 이름에 값을 대입하면, 변수에 맞는 자료형을 자동으로 선언해준다고 알려져 있다.
이와 더불어 python은 여러 변수의 값을 동시에 대입할 수 있는 기능도 제공한다.
a, b, c = 1, 2, 3
print(a)
print(b)
print(c)
## Result ##
1
2
3
x = 6
y = 2
x, y = y + 2, x + 3
print(x)
print(y)
## Result ##
4
9
그렇다면 누적 대입으로 변수의 값이 바뀌게 된다면 어떻게 될까?
숫자 리터럴(literal)은 변경이 불가능한 값, 이뮤터블(immutable)한 객체이다.
정수형 객체 12의 값 자체를 13으로 변경할 수 없기 때문에, python에서는 객체 식별 번호를 변경해서 누적 대입을 구현한다.
즉, 포인터가 가리키는 주소 값 자체를 바꿔버리는 것이다.
3. python에서의 값 비교
3.1) 등가성 (equality)
좌변과 우변의 값이 같은지 비교한다.
== 기호를 사용한다.
3.2) 동일성 (identity)
좌변과 우변의 값이 같은지와 좌변과 우변의 객체 식별 번호가 같은지 비교한다.
is 연산자를 사용한다.
4. python의 = 기호
python에서 사용되는 = 기호는 연산자가 아닌 명령문(expression)으로 간주된다.
C, C++, Java 등 다른 언어에서 = 기호는 결합 연산자로 사용할 수 있다.
아래 사진을 보자.
5. 뮤터블(Mutable) 객체와 이뮤터블(Immutable) 객체
5.1) 뮤터블 객체 (Mutable Object)
변경이 가능한 객체.
최초 생성 이후, 자유롭게 값의 변경, 추가, 삭제 등의 작업을 수행할 수 있다.
int, float 타입의 기본 변수, 사용자 정의 클래스, 리스트, 딕셔너리, 세트 자료형 등.
5.2) 이뮤터블 객체 (Immutable Object)
변경이 불가능한 객체.
최초 생성 이후, 값의 변경이 불가능하다.
숫자, 불리언, 문자열, 딕셔너리 키, 튜플 자료형 등.
수고하셨습니다!
'Dev. Study Note > Algorithm (Python)' 카테고리의 다른 글
6. 리스트와 튜플 (0) | 2022.01.11 |
---|---|
5. 배열 (0) | 2022.01.07 |
3. 자료구조와 배열 (0) | 2022.01.03 |
2. 반복 알고리즘 (0) | 2021.12.30 |
1. 알고리즘 (0) | 2021.12.29 |