pythoninternals
-
파이썬 int 내부구조 (Python int Internals)Python 2021. 2. 22. 21:59
Python 버젼 2.2 이후로는 파이썬에서의 정수는 언제나 int 타입을 가집니다 (이전에는 short int, long int 2가지로 나뉘어 있었습니다)[2]. 그리고 int 타입의 크기는 오로지 가용한 메모리 사이즈로 인해 제한 받습니다. 파이썬 int가 가질 수 있는 max 값(바이트로)은 아래와 같은 sys.maxsize를 통해 구할 수 있는데요: import sys print(sys.maxsize) # 9223372036854775807 이번 글에서는 파이썬 int가 cpython에서 어떻게 구성되는지 살펴보겠습니다: cpython longobject 내부구조 파이썬의 다양한 int 값은 실제 어떻게 cpython longobject에 저장되나 cpython longobject 내부구조 in..
-
파이썬 리스트 내부구조 (Python List Internals)Python 2021. 2. 13. 20:33
파이썬 리스트는 mutable 시퀀스(sequence)로, 주로 유사한(homogeneous) 아이템들의 콜렉션(collections)을 저장하기 위해서 사용합니다. 그렇기에 시퀀스가 기본적으로 가지는 연산자(collections.abc.Sequence ABC)들은 리스트에도 구현되어 있습니다. 이번 글에서는 CPython에서의 리스트 내부구조를 아래와 같은 사항을 중점으로 살펴보겠습니다: 리스트 내부구조와 기본 연산 메모리 할당 관련글: 파이썬 딕셔너리 내부구조 파이썬 튜플 내부구조 파이썬 클래스 내부구조 리스트 내부구조와 기본 연산 cpython 코드 상에서 파이썬 리스트는 다음과 같은 형태를 가지고 있습니다: 흔히 인지하는 리스트의 길이, len(list_a)는 PyVarObject의 ob_size..
-
파이썬 클래스 내부구조 (Python Class Internals)Python 2021. 1. 25. 22:22
클래스(class)는 데이터와 기능을 함께 번들링하는 수단을 제공합니다. 새로운 클래스는 새로운 객체의 type을 생성하며, 해당 type의 새로운 인스턴스(instances) 생성을 가능하게 합니다. 각 클래스의 인스턴스는 그 상태를 유지하기 위해 속성들을 가질 수 있습니다. 또한, 클래스 인스턴스들은 그것의 상태를 변경하기 위해 methods들을 가질 수 있습니다 [1]. class A: pass print(type(A)) # 출력 이 글에서는 클래스(User-Defined class)에 대해 다음과 같은 사항들을 기술합니다: class 구조 - type과 metaclass MRO (Method Resolution Order) class를 구성하는 것들 class / instance 생성 관련글: 파..
-
파이썬 튜플 내부구조 (Python Tuple Internals)Python 2021. 1. 12. 18:24
파이썬의 튜플은 파이썬 시퀀스(sequence)의 하나로, 주로 Immutable이라는 부분만을 중심으로 기술되곤 합니다. 하지만, 이는 튜플의 또 하나의 큰 장점인 필드명 없이이 다양한 데이터타입(heterogeneous/homogeneous)을 기록한다는 부분을 간과하게 하는데요 [2]. 이번 글에서는 파이썬 튜플의 내부구조와 관련해 아래와 같은 사항을 다뤄보려 합니다: 튜플구조와 2가지 특성 (Immutability, Records with no field names) 최적화 관련글: 파이썬 딕셔너리 내부구조 파이썬 클래스 내부구조 튜플구조와 2가지 특성 튜플은 파이썬의 다른 데이터타입과 비교할 때, 비교적 간단한 구조를 가집니다 [1]: 위와 같이 PyObject, PyVarObject, PyOb..
-
파이썬 딕셔너리 내부구조와 관련 개념 살펴보기 (Python Dictionary Internals and relating concepts)Python 2021. 1. 4. 17:20
파이썬 딕셔너리는 해쉬테이블(Hash Table)로 내부적으로 리스트를 포함(3.6 이후)하고 있으며 파이썬 언어 자체에도 많이 쓰이고 있어서(모듈 네임스페이스, 클래스 및 인스턴스 속성, 함수의 키워드 아규먼트 등 [5]), 그 내부구조를 자세히 공부해보면 다양한 중요개념들을 배울 수 있습니다. 또한, 3.6 버젼에서 내부구조가 변경되면서 키의 Ordering을 보장하였는데, 그 부분도 내부구조를 살펴보며 다룰 수 있을 것 같습니다. 이 글에서는 아래와 같은 사항을 다루고자 합니다: 딕셔너리는 해쉬테이블 왜 3.6 이후 버젼은 딕셔너리 키가 Ordering되나? Combined 및 Split table Memory 할당 Hash collision Key lookup optimization (Old Ve..