no image
Python의 메모리 절약법 : Object Interning(객체 재사용)
Mutable vs Immutable 파이썬의 객체는 생성 후 값을 변경할 수 있는지 여부에 따라 mutable, immutable로 나뉜다. 객체의 값을 변경할 수 있다는 것은, 그 값이 변경돼도 같은 메모리 주소를 가진다는 것을 의미한다. 그래서 mutable 객체인 List는 값을 막 바꿔봐도 id가 변하지 않는다. x = [1,2,3] y = x print(id(x)) print(id(y)) y[0] = 3 print(id(y)) print(id(x)) 2062815432192 2062815432192 2062815432192 2062815432192 하지만 immutable 객체인 int의 경우 값을 바꾸면 id가 변하게 된다. 이는 값이 변경되면서, 기존과 다른 새로운 객체를 가리키기 때문이다..
2022.06.03
no image
[파이썬] @(Decorator)란
@(Decorator)란? @staticmethod def _find_best_gt_match( thr: int, gt_matches: Tensor, idx_iou: float, gt_ignore: Tensor, ious: Tensor, idx_det: int ) -> int: """Return id of best ground truth match with current detection. https://github.com/PyTorchLightning/metrics/blob/master/torchmetrics/detection/mean_ap.py#L199-L928 파이썬으로 작성된 코드들을 보면 위와 같이 함수 위에 @로 시작하는 문구들이 있다. 위 코드에선 @staticmethod가 그렇다. 매번 함..
2022.06.01
no image
[파이썬] Formatter와 Linter 알아보기
왜 필요? 똑같은 실행을 하는 코드여도 남이 짠 코드는 잘 안 읽힌다. 모두가 각자 나름의 규칙을 지켜서 최대한 깔끔하게 작성했겠지만 그 규칙이 남에게도 적용되기란 쉽지 않다. 이때, 각자가 최소한 정해진 규칙대로 코드를 작성하려고 노력하면 이해하는데 조금이나마 도움이 될 수 있다. 언어마다 각각의 코드 작성 규칙이 있는데 이를 스타일 가이드 또는 컨벤션이라고 한다. 파이썬에도 PEP8이라는 스타일 가이드가 있다. PEP 8 – Style Guide for Python Code | peps.python.org PEP 8 – Style Guide for Python Code Author Guido van Rossum , Barry Warsaw , Nick Coghlan Status Active Type P..
2022.05.23
no image
[Python] Iterable(반복 가능한 객체)와 Iterator(이터레이터) 이해하기
Iterable(반복 가능한 객체)이란? Iterable의 의미와 효과 Iterable은 문자 그대로 반복 가능한 객체를 의미한다. 반복 가능함은 객체를 구성하는 요소가 여러 개이면서, 이 요소들을 한 번에 하나씩 꺼낼 수 있다는 것을 의미한다. 요소를 한 번에 하나씩 꺼낼 수 있다는 보장이 있다면, 굳이 객체의 모든 요소를 미리 메모리에 저장할 필요가 없다. 매번 실행마다 다음 요소에 해당하는 값만 새로 추가해주면 되기 때문이다. 이 경우 메모리를 절약할 수 있다는 장점이 생기게 되고, 이러한 특성을 Lazy Evaluation이라고 한다. 어떤 객체가 Iterable한가? 어떤 객체가 위와 같은 특성을 가지려면(반복 가능하려면) 해당 객체에 __iter__ 메소드가 있어야 한다. 따라서 hashatt..
2022.05.18
no image
[파이썬] Type hint 사용법
Python에도 Type을 써야 하나? Python은 동적 타이핑 언어기 때문에 함수 및 클래스의 parameter type을 명시해주지 않아도 된다. 따라서 C++의 templates나 JAVA에서의 generic 없이도 함수 및 클래스를 type에 상관없이 재사용할 수 있다. C++로 예를 들면 template을 통해서 type을 임의로 선언해뒀다가 호출 시에는 type을 명시해줘야 한다. 이는 template으로 임시로 부여한 type을 대신할 명시적인 type을 입력하는 것으로 정적 타이핑 언어인 C++에선 필수적이다. #include #include using namespace std; template T sum(T a, T b){ // template으로 임의 type 할당 return a +..
2022.05.13
no image
[파이썬] 변수(Python vs C++)
C++의 변수 할당 과정 C++에서 int 형 변수를 선언한 후 값을 저장하고, 이를 다른 변수에 저장하는 과정은 다음과 같다. int a = 1; int b = a; 4 Byte(int) 만큼의 메모리를 할당한 후 a 라고 이름 붙인다. a에 5를 저장한다. 다시 4 Byte 만큼의 메모리를 할당한 후 b 라고 이름 붙인다. a 에 저장된 5를 b 에 저장한다. 저장된 변수의 메모리를 확인하면 다음과 같다. int a = 1; int b = a; cout
2022.02.08
no image
파이썬을 파이썬답게 : 내장 함수를 활용한 Pythonic 코드 작성법
파이썬을 파이썬답게 본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코 school.programmers.co.kr 위 강의를 참고해 공부한 내용을 정리했습니다. int 다루기 몫과 나머지 구하기 divmod와 unpacking을 이용해서 쉽게 표현 가능 a = 7 b = 5 print(a//b, a%b) ↓ a = 7 b = 5 print(*divmod(a, b)) 진법 변환 int(x, base)으로 10진수 ↔ N 진수를 쉽게 변환 가능 num = '3212' base = 5 answer = 0 for idx, number in enumerat..
2022.02.08