>  기사  >  백엔드 개발  >  파이썬이 느린 이유

파이썬이 느린 이유

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-06-25 16:07:502897검색

Python은 동적으로 유형이 지정되고 해석되는 언어입니다. Python이 느리게 실행된다는 점은 잘 알려져 있습니다. Python의 실행 속도가 느린 이유 중 하나는 다음과 같습니다. 파이썬이 느린 이유를 세 가지 측면에서 분석해 보겠습니다.

파이썬이 느린 이유

dynamic type

Python은 동적 유형입니다. static type은 프로그램이 실행될 때 인터프리터가 변수의 유형을 알 수 없음을 의미합니다. C 언어의 경우 컴파일러는 변수가 선언될 때 변수의 유형을 알고 있지만, Python의 경우 프로그램이 실행될 때 변수가 일종의 Python 개체라는 것만 알고 있습니다.

다음 C 코드의 경우

int a = 1;
int b = 2;
int c = a + b;

컴파일러는 항상 a와 b가 정수라는 것을 알고 있습니다. 덧셈 연산을 수행할 때 프로세스는 다음과 같습니다.

# 🎜🎜 # 1을 a에 할당

2를 b에 할당

binary_add(a, b)

# 🎜🎜#결과를 c

동일한 기능을 구현하는 Python 코드는 다음과 같습니다.

a = 1
b = 2
c = a + b

관련 권장 사항: "

Python 비디오 튜토리얼#🎜🎜 #"#🎜 🎜#

통역사는 1과 2가 객체라는 것만 알 뿐, 이 객체의 유형은 알지 못합니다. 따라서 인터프리터는 각 변수의 PyObject_HEAD를 확인하여 변수 유형을 확인한 다음 해당 추가 작업을 수행하고 마지막으로 새 Python 객체를 생성하여 반환 값을 저장해야 합니다. #🎜 🎜#첫 번째 단계, a

1에 1을 할당합니다. a->PyObject_HEAD->typecode를 정수

2로 설정합니다. 🎜 #

두 번째 단계는 b

1에 2를 할당하는 것입니다. a->PyObject_HEAD->typecode를 정수

2로 설정합니다. b->val = 2로 설정

세 번째 단계는 binary_add4101e4c0559e7df80e541d0df514fd80(a, b)


1.a->PyObject_HEAD를 호출하여 가져오는 것입니다.

2.a 유형 인코딩은 정수입니다. 값은 a->val

3.b->PyObject_HEAD가

# 유형 인코딩을 가져옵니다. 🎜🎜#4 .b는 정수이고 값은 b->val

5입니다. Binary_add4101e4c0559e7df80e541d0df514fd80(a->val, b->val)#🎜을 호출합니다. 🎜##🎜 🎜#6. 결과는 정수이며 result

네 번째 단계는 c

1 객체를 생성하는 것입니다. ->typecode는 정수입니다# 🎜🎜#

2. c->val을 result

동적 유형으로 설정하면 모든 작업에 더 많은 단계가 포함됩니다. 이것이 Python의 수치 연산이 C 언어보다 느린 주된 이유입니다

Python은 해석된 언어입니다

위에서는 해석된 코드에 대해 설명하고 컴파일 유형 코드 간의 한 가지 차이점. 스마트 컴파일러는 반복되거나 불필요한 작업을 미리 예측하고 최적화하여 성능 향상을 가져올 수 있습니다. 컴파일러는 큰 주제이므로 여기서는 논의하지 않습니다.

Python의 객체 모델은 비효율적인 메모리 액세스를 가져올 것입니다.

C 언어의 정수와 비교했을 때 Python의 추가 기능이 더 많다는 점을 지적했습니다. 정보층. 이제 배열 상황을 살펴보겠습니다. Python에서는 표준 라이브러리에 제공되는 List 개체를 사용할 수 있습니다. C 언어에서는 버퍼 기반 배열을 사용합니다. 가장 간단한 NumPy 배열은 C 데이터를 기반으로 구축된 Python 객체입니다. 즉, 연속된 데이터의 버퍼에 대한 포인터가 있음을 의미합니다. Python의 목록에는 연속 포인터 버퍼에 대한 포인터가 있습니다. 이러한 포인터는 각각 Python 개체를 가리킵니다. 위의 예와 결합하면 이러한 Python 개체는 정수 개체입니다. 이 구조는 다음과 같습니다

데이터를 순서대로 단계별로 실행하는 작업을 수행하는 경우 저장 비용과 측면 모두에서 numpy의 메모리 레이아웃이 Python의 메모리 레이아웃보다 더 효율적이라는 것을 쉽게 알 수 있습니다. 액세스 시간 비용.

위 내용은 파이썬이 느린 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.