(오류 수정 환영합니다!)
파이썬... 멋모르고 쓸 때가 좋았다...
이 개념은 파이썬을 제대로 공부하기 위해서는 필수적으로 알아야 하는 개념이다!
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위 언어가 될 수 있는 비결이기도 하다^^