Skip to content

Commit c579be0

Browse files
authored
[김원경] 11주차 미션 제출 (#127)
1 parent c049703 commit c579be0

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

8th_members/김원경/11주차.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# 원하는 Type 분석해보기: List 타입
2+
### 1. data structure of python list
3+
![enter image description here](https://miro.medium.com/max/720/1*OJr_4YC6OMB30XQzvPmPkw.png)
4+
![enter image description here](https://devocean.sk.com/CKFinderJava/userfiles/images/py%EA%B5%AC%EC%A1%B0.png)
5+
### Python list data structure
6+
![enter image description here](https://miro.medium.com/max/720/1*l1O3TOk75WyRzrDn2bUe5A.png)
7+
- PyListObject: python list의 C 구현체.
8+
- PyObject_VAR_HEAD: 인스턴스마다 길이가 변하는 객체를 선언할 때 사용되는 macro.
9+
- **ob_item: 이중 포인터 (리스트 원소들의 포인터 배열에 대한 포인터). 객체 주소들을 저장한다.
10+
- allocated: 리스트에 할당된 크기
11+
- **Py__Object: 모든 클래스들의 조상인 PyObject를 상속받은 뒤 __에 type명(ex: int, var, list, array etc.)을 붙여 각 타입에 대한 파이썬 클래스를 구현.
12+
13+
이에 의해 파생되는 특징들?
14+
#### 1) 동적 타입 지원
15+
![enter image description here](https://devocean.sk.com/CKFinderJava/userfiles/images/image%282671%29.png)
16+
한 연산 수행 중간중간에 type checking이 많아 정적 배열보다 동작 느림
17+
18+
#### 2) 크기가 가변적(동적)
19+
처음에 크기를 작게 잡아뒀다 꽉 차면 list_resize 메서드를 작동시켜 크기를 늘려준다. (용어: 더블링)
20+
→ 해당 작업 발생 시 정적 배열보다 동작 속도 느려짐
21+
22+
#### 3) 포인터를 이중으로 거침
23+
ob_items**의 특징에 의해 value를 바로 얻을 수 없어 속도 느림
24+
25+
#### 4) 캐시의 메모리 지역성 문제
26+
![enter image description here](https://computerscience.chemeketa.edu/cs160Reader/_images/Memory-Hierarchy.jpg)
27+
![enter image description here](https://devocean.sk.com/CKFinderJava/userfiles/images/image%282672%29.png)
28+
![enter image description here](https://devocean.sk.com/CKFinderJava/userfiles/images/image%282673%29.png)
29+
list의 0, 1번 객체 즉 PyObject를 가리키는 포인터 주소는 메모리 상에서 인접하지만 value는 인접하지 않음
30+
→ nparray와 비교하면, 캐싱 시 메모리 지역성 문제로 cache hit rate가 더 낮음

0 commit comments

Comments
 (0)