[1강] python 알고리즘

김영환·2021년 1월 30일
0
post-thumbnail

Python 에서 이미 제공하는 데이터 타입으로 다 해결할 수 있을 것 같은데?
-> " 자료구조 " (data structures) 는 왜 공부를해야될까?

파이썬의 철학

파이썬에는 파이썬다운 방식이라는 고유한 철학이 있다.
이미 파이썬은 누구나 사용하는 거대하고 범용적인 언어가 되었지만, 여전히 파이썬다운 방식이라는 철학은 기저에 깔려 있으며, 새로운 모듈을 작성하는 개발자들이 한 번쯤은 되새기는 철학이다.
"문제를 풀어낼 바람직하고도 유일하며 명확한 방법이 존재할 것이다"
이것이 바로 ' 파이썬 다운 방식' 이다

각 언어별 자료형의 특징

언어지원 타입형태
C원시 타입
자바원시 타입, 객체
Python객체

원시 타입만을 지원하는 c와 원시 타입과 객체를 동시에 지원하는 자바, c나 자바는 성능에 대한 우선순위가 높은 언어다. 때문에 좀 더 하드웨어에 가까운 원시 타입을 별도로 제공하며, 원시 타입으로 구현했을 때 훨씬 더 빠른 속도로 실행할 수 있다.

그렇다면 파이썬은?

파이썬은 애초에 편리한 기능 제공에 우선순위를 둔 언어인 만큼 느린 속도와 더 많은 메모리를 차지하더라도 훨씬 더 다양한 기능을 제공할 수 있는 객체에 관심을 두었다.
파이썬은 원시 타입의 속도를 포기하는 대신 객체의 다양한 기능과 편의성을 택했다.

파이썬의 자료형

가변객체와 불변객체

1. 불변객체

>> 10
>> a = 10
>> b = a
>> id(10), id(a), id(b)
(4496050816, 4496050816, 4496050816)

모두 원시 타입이라면 각각의 값들은 각 메모리의 다른 영역에 위치할 것이다.
그러나 파이썬은 모든 것이 객체이므로, 메모리 상에 위치한 객체의 주소를 얻어오는 id() 함수를 실행한 결과 놀랍게도 모두 동일하다

2.가변객체

>> a = [1, 2, 3, 4, 5]
>> b=a
>> b
[1, 2, 3, 4, 5]
>> a[2]=4
>> a
[1, 2, 4, 4, 5]
>> b
[1, 2, 4, 4, 5]

a는 list다, b는 a를 할당하여 참조가 되게 했다. a요소 하나를 조작해서 값을 변경했더니 b의 값도 변경되었다. 만약 b가 int나 str을 참조하고 있다면 불변 객체이기 때문에 절대 이런 일이 일어나지 않겠지만, list는 가변 객체이기 때문에 얼마든지 일어날 수 있다.

불변 str 의 오류

>> a ='abc'
>> id('abc')
140666545382320
>> id(a)
140666545382320
>> a = 'def'
>> id('def')
140666564546672
>> id(a)
140666564546672
>> a[1]='d'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

a 변수는 str 자료형인데, 처음에는 abc로 할당했다가, 이후에 def로 할당한다.
a 변수의 값이 변경된 셈이다. 다른 str 타입이 def를 다시 참조했을 뿐 실제로 abc도, def도 한번 생성된 후에 변경된 적이 없다. 불변이므로 변경될 수도 없다.

0개의 댓글