파이썬은 왜 느린가?

python · 2019. 12. 11. 16:13

 

 

1. 파이썬은 정적이 아닌 동적 타입이다.

인터프리터가 정의된 변수의 유형을 알고 있지 않음.

파이썬 변수의 경우는 프로그램 실행시의 변수는 파이썬 개체의 일부 종류임.

 

1+2 연산의 경우 예시는 다음과 같다.

C언어 Python

1. <int> 1을 a에 할당
2. <int> 2을 b에 할당
3. binary_add<int, int>(a,b) 호출
4. 결과를 c에 할당

1.a에 1을 할당
1a. a->PyObject_HEAD->typecode 정수 설정
1b. a->val = 1 설정

 

2. b에 2를 할당
2a. b->PyObject_HEAD->typecode 정수 설정

2b. b->val = 2 설정

 

3. binary_add(a,b) 호출

3a. a->PyObject_HEAD 에서 typecode 찾기

3b. a는 정수형; 값 a->val

3c. b->PyObject_HEAD 에서 typecode 찾기

3d. b는 정수형; 값 b->val

3e. binary_add<int, int>(a->val, b->val) 호출

3f. 정수형 결과값 result

 

4. 파이썬 개체 c 생성

4a. c->PyObject_HEAD->typecode 정수 설정

4b. c->val에 result 설정

 

2. 파이썬은 컴파일 형식이 아닌 인터프리터 형식이다.

 

3. 파이썬의 개체 모델은 비효율적인 메모리 액세스가 발생할 수 있다.

가장 간단한 형태의 Numpy배열은 C의 배열과 유사한 파이썬 개체임.

이 배열은 값들의 연속되는 데이터 버퍼를 위한 포인터를 가지고 있다.

 

파이썬 리스트는 포인터의 연속되는 버퍼를 위한 포인터를 가지고 있다.

각각의 포인터들은 그것들의 데이터(지금의 경우는 정수) 주소를 가지고 있고 그것들을 가르키고 있다.

 

 

연속되는 데이터로 여러 단계를 통하여 어떠한 작업을 하고 있다면

Numpy 레이아웃은 저장과 액세스 측면 모두에서 파이썬의 레이아웃보다 훨씬 더 효율적임.

 

https://medium.com/@cookatrice/why-python-is-slow-looking-under-the-hood-7126baf936d7

 

Why python is Slow:Looking Under the Hood

파이썬은 왜 느릴까요? 내부 원리를 살펴 봅시다.

medium.com

https://itmining.tistory.com/65

 

정적언어(타입)과 동적언어(타입)

이 글은 PC 버전 TISTORY에 최적화 되어있습니다. 타입 타입이란, 한글로 자료형입니다. int형, short형, float형, bool형, 객체 등이 있습니다. int a = 10; bool isKilled = false; Character human = new Chara..

itmining.tistory.com

 

'python' 카테고리의 다른 글

A Visual Intro to NumPy and Data Representation  (0) 2019.12.05
배열 생성 시 소요시간 비교  (0) 2019.12.04