자료구조,알고리즘(Python)

1. Python에서의 객체(Object)

드롱드롱 2024. 9. 1. 17:27

서론

본격적으로 코딩을 공부하기 시작하면서 자료구조/알고리즘에 대해 깊이 있게 공부해 볼 시간을 언젠가 가져야 함을 알고 있었다. 이제 백준과 solved.ac를 통해서 파이썬에 대해서 다룰 수 있을 정도가 되었다. 문제를 풀면서 자료구조와 알고리즘에 대해 공부해야만 풀 수 있는 문제들을 맞닥뜨리게 되면서 이왕 이렇게 된 거 차근차근 블로그에 하나씩 글을 올려보자고 생각이 들었고, 9월 1일 기분 좋게 한 달을 시작하는 날에 시작하게 됐다!

주절주절 말이 길었는데 그리하여 자료구조/알고리즘의 시작은 바로 뜬금없이 python에서의 객체이다.

 

이 블로그는 cdragon님의 블로그를 중심적으로 차근차근 따라가며 공부한 것입니다.

https://cdragon.tistory.com/category/CS%20%EC%A7%80%EC%8B%9D/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%99%80%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%28Python%29

 

'CS 지식/자료구조와 알고리즘(Python)' 카테고리의 글 목록

개발자를 준비하면서 공부한 것과 제 생각들을 정리한 기술 블로그입니다. rkdckdfyyd@naver.com

cdragon.tistory.com

 

 

Python에서 모든 것은 object입니다.

1. 객체(Object)

  • 전반적인 의미, 보여지고 만질 수 있는 물질적인 것.(사전적 정의)
  • 프로그래밍 관점, 메모리 상에 존재하는 함수와 변수의 조합

 

파이썬에서 모든 것은 object, 객체이다.

  • integers
  • strings
  • functions
  • files
  • etc.

 

2. 파이썬 정수(Interger)는 단순 정수보다 더 많은 것을 의미한다.

표준 파이썬의 구현은 c언어로 쓰여졌다. 그렇기 때문에 a=512 같이 a라는 변수에 할당된 int형 512는 단순히 숫자 512가 아니란다. 이것은 실제로 여러 값을 포함하는 복합적인 C 구조에 대한 포인터입니다, (이게 무슨 뚱단지같은 소리인지 코린이인 나로써는 이해하질 못하겠다. 대충 그냥 숫자가 아니라 뭔가 다른 것들이 내재된 객체라고 이해해두자.)

 

3. Python variables(파이썬 변수)

변수는 객체에 부착된 label이다. 변수는 객체나 객체의 컨테이너가 아니며, 객체에 대한 포인터나 참조(reference) 역할만 한다.

(말이 너무 어렵다. 변수란 깨끗한 투명 물병을 감싸고 있는 삼다수 라벨 정도라고 생각하자.)

연산을 하면 단순히 값을 복사하는 것이 아니라, 가리키는 포인터 자체를 옮기는 것이다.

 

4. Immutable objects(변경 불가능한 객체)

이제야 그나마 잘 아는 용어가 나왔다. Immutable 객체에 관한 내용은 잘 포스팅해둔 글을 올려두고 다음 내용으로 넘어가겠다.

https://drongdrong.tistory.com/11

 

Deep copy, Shallow copy

그래프 알고리즘을 공부하던 도중 블로그 설명 중간에 있던 deep copy와 shallow copy의 보다 명확한 이해를 위해 글을 작성한다. copy에 대해 이해하기 전에 그보다 더 기본 배경이 되는 mutable과 immutab

drongdrong.tistory.com

 

5. Data types

각 객체는 데이터 타입을 갖는다.(int, float, etc..)

  • 객체를 가리키는 변수는 특정 타입을 갖지 않는다.
  • 변수에 대한 데이터 타입을 선언할 필요가 없다.(다른 언어와는 다른 부분)
  • 우리가 저장하려는 데이터를 전달하면, 그 타입에 따라서 객체가 생성되고, 그 객체에 의해 data type이 결정된다. 그래서 변수라는 애는 단순히 그 객체를 가리키는 reference로써 기능을 하기 때문에 data type이 없는 것이다.

나는 이 글을 쓰기 전까지만 해도 변수=객체라는 생각을 했는데 그것이 절대 아님을 확실히 깨달았다.

 

6. Python Built-in Data types

mutable에 O가 없는 것은 자연스럽게 immutable이라고 생각할 수 있다.

 

결론

  1. 객체는 변수가 아니다. 변수는 객체를 참조할 수 있는 포인터 역할이다.(삼다수 페트병을 둘러싼 라벨지)
  2. 객체는 주소, 값, 데이터 타입 3가지로 이루어져 있다.