Search
Duplicate

Mutable / Immutable

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Python
Scrap
태그
9 more properties
(오류 수정 환영합니다!)
파이썬... 멋모르고 쓸 때가 좋았다...
이 개념은 파이썬을 제대로 공부하기 위해서는 필수적으로 알아야 하는 개념이다!

1. 파이썬의 객체

파이썬의 모든 것은 객체이다. 이 객체에는 두가지 성격이 있다.
mutable object → (변경이 가능한 객체)
immutable object → (변경이 불가능한 객체)
그럼 immutable 먼저 알아보자!

2. Immutable

변수에 어떤 값을 할당하고 난 뒤 그 값을 변경해도 다른 곳에 영향을 미치지 않는 성격을 말한다.
call by value 성격을 가짐
일반적으로 선언하는 변수들과 튜플이 이에 해당한다.
a = 1 #a 는 1이라는 객체를 가리킨다. b = a #b 는 1이라는 객체를 가리킨다.(a를 가리키는 것이 아니다.) b += 1 #b 는 2라는 객체를 가리킨다. (1 + 1을 수행한 것이 아니라 2라는 객체로 옮긴 것이다.) print(a, b) >>>1 2 #a는 여전히 1이라는 객체를 가리키고 b는 2라는 객체를 가리킨다.
Python
복사
아래 그림 참고( id는 그 객체가 위치한 메모리 주소이다.)
위 주석이 이해되지 않는다면 다음 페이지로! → 파이썬은 어떻게 변수를 다룰까?

3. mutable

변수에 어떤 값을 할당하고 난 뒤 그 값을 변경하면 다른 곳에 영향을 미치는 성격을 말한다.
call by reference 성격을 가짐
list, set, dict(딕셔너리)가 이에 해당한다.
a = [1, 2, 3, 4] #a 는 리스트 객체를 가리킨다. b = a #b 는 리스트 객체를 가리킨다.(a를 가리키는 것이 아니다.) b[0] = 8 #b로 리스트 객체를 수정했다. print(a) #a와 b가 가리키는 객체가 동일하므로 a에서도 값이 변경되었다. >>>[8, 2, 3, 4]
Python
복사
처음 접하는 분들은 위의 주석과 크게 다르지 않아 이해하기 어려울 수 있다. 역시 이해하는 데에는 그림이 최고! (주석이 크게 다르지 않은 만큼 파이썬이 객체를 다루는 논리는 명료하다.)

4. 한 발 더 나아가기

call by value, call by reference '처럼' 동작한다는 것의 의미를 이해하기를 바란다. 파이썬은 그냥 이곳저곳 옮겨 다니며 값을 가리키는 call by assignment 방식이다.
파이썬 역시 c언어를 기반으로 만들어진 언어라 모두 c언어의 포인터 개념으로 이해가 가능하다. 또한 파이썬의 모든 객체들은 동적 할당의 개념으로 만들었다는건 안비밀.
파이썬의 리스트는 c언어의 배열과 완전히 다르다.

조금만 더!!!

데이터들을 연속적으로 저장하지 않고 아무렇게 저장하는데 어떻게 데이터 사이언스분야에 써먹는거지? 저러고도 효율이 나오나?
맞다 ㅠ 데이터 사이언스는 엄청난 양의 데이터와 행렬들을 다루는데 저렇게 값이 조잡하게 저장되어있으면 답이 없다. 그 해결책은 '라이브러리'이다.
(파이썬이 강력한 이유 중 8할은 라이브러리 빨이라고 생각한다...)
numpy 라이브러리는 c언어로 작성되어 있어서 c언어의 효율적 메모리 할당과 파이썬의 효율적 개발속도 두마리 토끼를 잡아버렸다... 즉 c언어의 배열을 파이썬에서 구현할 수 있도록 돕는 라이브러리이고 이를 통해 다차원 배열처리를 쉽게 쓸 수 있도록 돕는다. 파이썬이 데이터사이언스 분야 1위 언어가 될 수 있는 비결이기도 하다^^