본문 바로가기

app

(154)
Python string objects implementation 해당 글은 http://www.laurentluce.com/posts/python-string-objects-implementation/ 의 글을 번역한 것입니다. 해당 글의 소스는 python2를 기준으로 작성되었으며 python버전에 따라 다를 수 있습니다. PyStringObject 구조 파이썬의 string object는 PyStringObject 구조로 표현됩니다. “ob_shash”는 해쉬로 계산된 값입니다. “ob_sval"는 String의 사이즈인 “ob_size”를 포함 합니다. 문자열은 null로 종료됩니다. ob_sval의 초기 사이즈는 1byte이며, ob_sval[0] = 0이 됩니다. python3의 경우 PyUnicodeObject 구조로 표현됩니다. # python2 type..
Python integer objects implementation 해당 글은 http://www.laurentluce.com/posts/python-integer-objects-implementation/ 의 글을 번역한 것입니다. 해당 글의 소스는 python2를 기준으로 작성되었으며 python버전에 따라 다를 수 있습니다. 이 글은 파이썬의 integer가 내부적으로 어떻게 관리 되는지 설명합니다. 파이썬의 Integer 오브젝트는 PyIntObject 구조로 표현됩니다. 그 값은 long 타입으로 구현되어 있습니다. (Python3에서는 PyLongObject 객체로 integer는 long으로 대체되었습니다.) /* python2 */ typedef struct { PyObject_HEAD long ob_ival; } PyIntObject; 새로운 정수 객체가..
python hash && cache hash 우리가 흔히 사용하는 캐시는 두가지의 값이 필요합니다. Key / value , 즉 dictionary의 한 형태를 가지고 있습니다. 그렇다면 key는 어떻게 만들어질까요? 아시는 바와 같이 hash값으로 만들어집니다. 즉 특정한 연산을 통해( 특정 모듈러연산) 특정값으로 변환한 값입니다. ( 해시 고유값 분포 및 재연산은 이번 글에서 제외 합니다. ) 그렇다면 모든값을 hash로 만들수 있을까요? python에서 제공하는 hash 함수를 사용할 수 있을까요? 정답은 “NO”입니다. hash()를 사용 할 수 있는 데이터는 immutable 객체만 가능합니다. 즉 mutable은 해시가 불가능 하단 말이 됩니다. immutable / mutable Immutable과 mutable의 객체는 다음..
python에서 pow(n, n) 와 n**n 중 어느게 빠를까? 제곱근 계산을 위한 함수인 pow(n, n)와 n**n 중 어느 게 더 빠를까? 결론부터 말하면 pow() 함수와 **는 "거의" 동일 합니다. 네 "거의"요 **의 경우 bignum을 통해 연산을 합니다, 반면 pow()는 부동소수점으로 변환되어 이 변환되는 과정이 있어 시간이 조금 더 소요된다고 합니다. 하지만 결국 power() 연산은 같은 함수를 하기 때문에 거의 비슷합니다. 여기 까지가 동작 과정의 대한 이야기인데... 실제 어떻게 구현되어 있는지 살짝만 보겠습니다. https://github.com/python/cpython/blob/667b91a5e210e20946ad41f1796c544a1becf1b6/Objects/longobject.c#L4022 cpython의 pow 계산하는 일부분만..
파이썬 백엔드 면접 질문들 (장고+시스템+디비 포함) 동기와 비동기 파이썬 클로져 브라우져에서 서버와 통신 상세히 쿠키와 세션 세션의 저장방식은? 딕셔너리 구현방법 충돌이 일어났을때는? 리스트와 튜플의 차이 @staticMethod, @classMethod, @property 디버깅 툴은 어떤걸 썼는지? 메모리 효율은 어떻게 했는지? 파이썬 메모리 관련 테스트 하는 이유 테스트를 어디까지 진행했는지 테스트관련 목킹 테스트 커버리지를 어떻게 지켰는지 코드리뷰를 어떻게 하는지 사람과의 충돌은? Fib 재귀(손코딩) 메모리 제이션 구현 + LRU 구현 fib에서 10만번째는 어떻게 되는가? 어떻게 수정할수 있는가? 장고 모델 쿼리 (손코딩) Dict 탐색시간, inset 시간 해쉬 충돌 조건 클로져 함수 동작 방식 에어플로우 왜 사용했는지, 어떻게 관리 했는지 ..
python은 GIL때문에 스레드가 효율적이지 않으면서 왜 multithreading 모듈이 있을까? 멀티스레딩 하위 문제 중 하나의 다른 작업이 완료되는 동안 기다려야 하는 경우 싱글 스레드보다 멀티 스레딩이 좋다. (Ex : I/O 과중한 작업) The interpreter will reacquire this lock for every 100 bytecodes of Python instructions and around (potentially) blocking I/O operations. 같은 프로세스 안에서 동작하므로 자원 공유가 가능 (queue, pickle 사용) 멀티 프로세스 하위 문제가 동시에 발생하는 경우 하지만 코어수보다 많은 수를 사용하면 성능 저하가 올 수 있다. (https://stackoverflow.com/questions/40217873/multiprocessing-use-o..
python의 팩토리 패턴과 partial 먼저 글에 들어가기 전에 패턴을 사용할 경우 생각해야 할 점은 다음과 같습니다. 1. 불필요한 패턴은 복잡성을 증가시킨다. 2. 패턴이 필요하다는 의미는 언어차원에서 지원하지 못하는 기능이 있다는 반증이다. 팩토리 패턴은 클래스와 함수를 매개 변수로 전달, 속성으로 저장할 수 없는 프로그래밍 언어를 위해 설계됩니다. 여기에서 말하는 속성을 저장할 수 없는 프로그래밍은 특정한 객체들은 변수로 사용하지 못하는 언어들을 가리킵니다. (이 급 객체) 그에 반대는 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킵니다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 합니다. 일급 함수를 지원하는 파이썬에서는 팩토리 패턴이 좋지 않습니다. (..
왜 python의 http 헤더 파서는 email 클래스에 있는가??!! 클래스들은 나름의 이유로 클래스끼리의 묶임이나 폴더(패키지)에 상주합니다. 파이썬 코어 소스를 보면서 그중에서 가장 이해가 되지 않는 것은 http 헤더 파서를 email.parser를 통해 동작한다는 것입니다. (이외에도 http 파서를 하기 위해 email.message, email.feedparser, email.utils 등을 사용합니다.) 왜 http.header, http 등의 독립적인 클래스가 아닌 email 클래스에 있는 것일까요?? (parser는 클래스는 regex(정규표현식)를 위해 클래스가 존재합니다. 또한 이 글에서는 헤더에 관한 파서만을 생각했습니다. ) python email클래스는 무슨 일을 하는가? Python Email 패키지는 MIME 및 기타를 포함하는 이메일 메시지를..