TL;DR 📌 파이썬에서 타입은 “지원되는 연산의 집합”에 의해 정의된다. 덕 타이핑(duck typing)이란, 파이썬이 런타임에서 실행될 때에 해당한다. 객체의 선언된 타입은 전혀 상관이 없으며, 실제로 그 객체가 어떤 연산을 지원하는지만 중요하다. 이름 기반 타이핑(nominal typing)이란, 파이썬에 타입 힌트를 추가하고 m...
[Python] 타입(Type): 덕 타이핑(Duck Typing), 이름 기반 타이핑(Nominal Typing)
[Python] Data Class Builder: collections.namedtuple, typing.NamedTuple, @dataclass
Data Class Builder란? 데이터(lat, lon)를 저장하는 역할만을 수행하는 단순한 클래스 Coordinate를 생각해보자. class Coordinate: def __init__(self, lat, lon): self.lat = lat self.lon = lon moscow = Coordinat...
[Python] 가비지 컬렉션(Garbage Collection): 객체를 삭제하려면?
TL;DR 📌 del은 객체(objects)를 삭제하는 것이 아니라 참조(references)를 삭제한다. 파이썬에서 object는 명시적으로 제거되지 않으며, object가 unreachable 해지면 자동으로 garbage-collected 된다. CPython의 가비지 컬렉터(garbage collector)는 reference c...
[Python] 가변성(Mutability)과 불변성(Immutability): 튜플은 항상 불변일까?
흔히 파이썬에서 “tuple은 불변이다” 라고 알려져 있다. 그런데, 과연 파이썬의 tuple은 어떠한 상황에서든 불변일까? 그리고 tuple 내에 변경 가능하다고 알려진 list가 들어있다면, 그 list는 변경 불가능할까? TL;DR 📌 변경이 불가(immutable)하다고 알려진 tuple의 불변성은 가지고 있는 “참조” 자체...
[Python] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)
TL;DR 📌 깊은 복사(deep copy)는 참조로만 채워지는 얕은 복사(shallow copy)와는 다르게, 원본 컨테이너에서 가지고 있는 실제 객체 자체가 복제되는 것이다. 복사(Copy) 파이썬에서 복사(copy)란 다른 ID를 가지는 동일한 객체를 의미하며, 다음과 같이 두 가지의 종류가 있다. 얕은 복사 (shallow co...
[Python] ==와 is의 차이점
TL;DR 📌 파이썬에서 변수(variable)는 객체(attach)에 부여(attach, bind)된 라벨(label)일 뿐이며, 값을 담고 있는 상자(box)가 아니다. ==은 equality를 비교하는 연산자이고, is는 identity를 비교하는 연산자이다. 변수(Variable) 파이썬의 == 연산자와 is 연산자의 ...
[Python] First-Class Object, Higher-Order Function, 그리고 함수형 프로그래밍
TL;DR 📌 파이썬에서 모든 함수는 first-class object이다. 따라서 함수를 어떤 변수에 할당할 수 있으며, 그 변수로 호출할 수 있다. 그리고 함수를 다른 함수에 인자로 전달할 수도 있고, 어떤 함수의 결과로서 반환할 수도 있다. higher-order function이란 함수를 인자로 받거나 함수를 반환하는 함수(ex. m...
[Better Way #36] 이터레이터나 제너레이터를 다룰 때는 itertools를 사용하라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 04. Comprehensions and Generators”을 읽고 정리한 내용입니다. import itertools help(itertools) 여러 이터레이터 연결하기 chain: 여러 이터레이터를 하나의 순차적인 이터레이터로 합친...
[Better Way #35] 제너레이터 안에서 throw로 상태를 변화시키지 말라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 04. Comprehensions and Generators”을 읽고 정리한 내용입니다. throw 메서드 throw 메서드를 통해 제너레이터가 마지막으로 실행한 yield 식의 위치에서 예외를 다시 발생시킬 수 있다. throw를 사용하는...
[Better Way #34] send로 제너레이터에 데이터를 주입하지 말라
본문은 “파이썬 코딩의 기술 (Effective Python, 2판)”의 “Chapter 04. Comprehensions and Generators”을 읽고 정리한 내용입니다. send 메서드 파이썬 제너레이터가 지원하는 메서드로, yield 식을 양방향 채널로 만들어주어 데이터를 제너레이터에 주입할 수 있도록 한다. 제너레이...