1. 파이썬은 정적이 아닌 동적 타입이다.
인터프리터가 정의된 변수의 유형을 알고 있지 않음.
파이썬 변수의 경우는 프로그램 실행시의 변수는 파이썬 개체의 일부 종류임.
1+2 연산의 경우 예시는 다음과 같다.
C언어 | Python |
1. <int> 1을 a에 할당 |
1.a에 1을 할당
2. b에 2를 할당 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
https://itmining.tistory.com/65
'python' 카테고리의 다른 글
A Visual Intro to NumPy and Data Representation (0) | 2019.12.05 |
---|---|
배열 생성 시 소요시간 비교 (0) | 2019.12.04 |