[Python] Iterable and Iterator, plus Generator
·
Programming
Iterable and Iteartor, and GeneratorIterable for 문에서 in 뒤에 위치하여 iterate (반복, 순회)가 가능한 object를 가르킴.__iter__() 라는 special method를 구현하고 있으며, 이를 통해 자신에 대한 iterator object를 반환할 수 있음.__iter__() special method는보통 iter()함수에 argument로 "iterable instance"가 전달되는 경우해당 argument로 넘겨진 객체(=iterable 객체)의 __iter__() 메서드 가 호출되어 반환되는 iterator 객체가 iter()함수에서 최종 반환됨.여러 데이터를 묶어서 관리하는 Collection들의 object들의 경우, 거의 다 ite..
[Python] List Comprehension
·
Programming
List ComprehensionList comprehension is an expression(표현식) that transforms a collection (not necessarily a list) into a list.list를 생성하는 expression 으로, 원본이 되는 collection 의 모든 item 혹은 일부 item들에 대해 같은 operation을 적용하여 새로운 list (사실은 collection 또는 generator) 를 생성한다.사실 list comprehension 은 일종의 shorthand expression으로 중첩된 여러 반복문(loop) 및 조건문(if)으로 collection을 생성하는 것을 한 줄로 작성가능하게 해준다.list comprehension은col..
[Python] Assignment와 Shallow Copy, Deep Copy
·
Programming
Shallow Copy와 Deep Copy Python에서 assignment를 수행될 때, 오른쪽이 reference (즉 variable이 =연산자 우측에 있음)인 경우 기본적으로 Shallow Copy가 발생한다. 하지만 특정 경우에는 Deep Copy 가 필요한 경우가 있기 때문에 이 둘의 차이를 명확히 알고 있는 것이 중요하다. 이 둘의 차이는 다음 그림이 간략하게 설명해 준다. Shallow copy가 일어났다면 왼쪽의 경우처럼 실제 데이터가 있는 메모리영역 Referenced Object가 공유되고 이를 참조하는 새로운 Cloned Object가 만들어진다. 때문에 실제로는 같은 Object를 가리키고 있기 때문에 Original Object에서 수정이 일어나면 해당 수정사항이 Cloned ..
[Programming] Garbage Collection (GC)
·
Programming
Garbage collection (GC)은 Programming에서 memory를 관리하는 기법 중의 하나임. Dynamical Memory Allocation에서 더 이상 사용되지 않는 object 또는 data에 할당된 memory를 자동으로 회수하는 Process를 의미한다. GC를 지원하지않는 C, C++ 등의 프로그래밍 언어에서는 일반적으로 programmer가 memory의 할당과 해제를 explicitly(명시적으로) 처리해야하며, 이를 잘못 수행하여 발생하는 memory leakage는 100% programmer의 책임이었음. Pointer와 함께 이 명시적인 memory 관리 는 Programmer에게 강력한 권한을 주면서 동시에 미숙한 programmer들의 잘못된 처리로 인해 프로..
[Python] Interpreter and PVM (Python Virtual Machine)
·
Programming
Interpreter and PVM (Python Virtual Machine) 대학을 막 졸업해서 초보 프로그래머로 일을 할 때 개인적으로 가지고 있던 편견 중 하나가 script language를 매우 하찮게 생각하면서 오직 compiler languages 만을 programming language로 생각했던 것이다. (지금 돌이켜보면 이불킥하고 싶을 정도로 부끄러운 생각이었다.)학교에서 살짝 배웠던 Visual Basic에서 느꼈던 interpreter language의 간단함이 너무 머리에 남아서였는지 C, C++ 등의 언어와 달리 interpreter language를 무시하던 선입견을 가졌었다. 우스운 건, interpreter language는 무시하면서도 Virtual machine을 사..
[Python] recursive call : Fibonacci Sequence
·
Programming
Recursive call의 경우, 특정 함수가 내부에서 자기자신을 다시 호출하는 것을 가르킴. 다음과 같은 재귀적인 수식을 있는 그대로 작성하게 해준다는 장점은 있지만, 속도 및 메모리 사용 등의 측면에서는 그리 환영받지는 못함 (때문에 많이 사용되지 않음). $$ f(t) = f(t-1) + ... $$ $f(t)$를 정의하는데에 같은 함수가 사용되는 경우를 recursive call로 작성하면 매우 직관적인 구현이 가능하다. 대표적인 예로 Fibonacci sequence를 들 수 있다. $$ f(0) = 0, \\ f(1) = f(2) = 1 \\ f(n) = f(n-1) + f(n-2) \text{ , where }n >2 $$ Python 구현 : Recursive call 이용한 경우. de..