Python 딕셔너리의 메모리 관리 구조(a.k.a hash table)
·
Programming
1. 딕셔너리 생성 후 해시 테이블 기본 형태인덱스해시 값키 값0NoneNoneNone1NoneNoneNone2NoneNoneNone3NoneNoneNone4NoneNoneNone5NoneNoneNone6NoneNoneNone7NoneNoneNone (처음 딕셔너리가 만들어지면 이런 식으로 인덱스만 결정된 채 나머지 데이터는 비어있는 상태의 8행의 테이블이 만들어진다고 한다.) 2. 값이 입력 되었을 때 해시 테이블의 형태인덱스해시 값키 값034891759823412'Alice''010-1234-5678'145981769173452'Bob''010-2345-6789'258917234123412'Carol''010-3456-7890'3NoneNoneNone4NoneNoneNone5NoneNoneNone6N..
오버헤드(Overhead)란? (Feat 전역변수 vs 딕셔너리)
·
Programming
1. 오버헤드의 정의 오버헤드는 주요 작업을 수행하는 데 추가로 드는 비용을 의미한다. 1) 메모리 오버헤드실제 데이터를 저장하는 데 필요한 순수한 메모리 공간 이외에 추가로 필요한 메모리.예를 들어, 변수의 이름, 타입, 참조 정보 등을 저장하기 위해 추가 메모리 공간이 필요하면, 그것이 바로 메모리 오버헤드 2) 시간 오버헤드데이터를 처리하거나 찾는 데 추가적인 연산 시간이 발생하는 것.예를 들어, 해시 테이블에서 충돌을 해결하거나 데이터를 재구성하는 과정에서 발생하는 시간 비용. 2. 전역 변수에서의 오버헤드  다음과 같은 코드를 바탕으로 논의해 보자.globals()['var_0'] = 10 1) 변수 이름 관리'var_0'이라는 이름을 전역 네임스페이스에 등록해야 함.이 이름이 어디에 위치하는지..
Python에서 반복문을 활용한 동적 변수 생성 및 관리 2. (딕셔너리 최고)
·
Programming
globals를 통한 반복문에서의 동적 변수 생성과 딕셔너리를 생성했을 때, 메모리 관리 측면에서의 차이점을 생각해 보자. 1. globals()의 메모리 관리globals()는 전역 변수 테이블을 직접 수정한다.따라서 프로그램이 종료되기 전까지 메모리에서 해제되지 않는다.따라서 가비지 컬렉션이 적용되지 않는다.만약 반복문을 1000번 돌린다고 가정하면 1000개의 전역 변수가 생성되며, 메모리에 계속 남아 메모리 관리에 부담을 줄 수 있다.또한 메모리에서 해당 변수명을 삭제하려면 하나씩 제거해야 하므로 매우 비효율적(변수 이름이 전역 네임스페이스에 추가되므로, 변수 관리가 어려워지고 이름 충돌 위험도 커진다.) 2. 딕셔너리의 메모리 관리딕셔너리는 일반 객체이다. 따라서 특정 함수나 클래스(스코프) 내..
Python에서 반복문을 활용한 동적 변수 생성 및 관리 1
·
Programming
1. 지양해야 할 방법 : 전역변수로 구현data = {}for i in range(3): data[f'var_{i}'] = i * 10  globals()을 이용해서 전역변수로 처리해 버리는 방식. globals()[ '변수 1' ]이라고 코딩하면 '변수 1'이 전역변수로 설정할 수 있다. 애초에 globals()[ ] 이게 globals의 사용 용법인 듯하다. 그러나 비추하는 방식이라고 한다. 비추하는 이유는 1) 유지보수가 어렵다.2) 디버깅과 IDE 자동완성이 어렵다.3) 메모리 사용이 비효율적이다.  cf) 전역 변수 관리 방식 전역 변수는 모듈 수준에서 관리되며, 전역 네임스페이스 자체가 해시 테이블로 동작한다.그러나 전역 변수는 단순히 값 저장만 하는 것이 아니라, 다음과 같은 값들도 ..
HardConcentrator
'Programming' 카테고리의 글 목록