본문 바로가기

전체 글

(65)
Python 라이프 사이클과 reference count 참조 계수(Reference Count) 참조 계수란, 객체의 라이프 사이클(Life Cycle)을 관리하는 방법 중 하나로 객체를 참조하고 있는 횟수를 추적하는 지표다. 참조 계수가 0이 되면 해당 객체를 메모리에서 해제한다. 객체의 참조 계수를 보려면 sys 라이브러리의 getrefcount() 함수를 사용하면 된다. import sys num = 3 print(sys.getrefcount(num)) >> 33 3이라는 데이터가 담긴 객체를 33군데에서 참조하고 있다는 것이다. 그 33군데 중 num도 하나를 차지할 것이다. class MyClass: pass obj = MyClass() # reference count = 1 obj2 = obj # reference count = 2 del obj2..
Python 깊은복사 vs 얕은복사 가변 객체(Mutable Object) vs 불가변 객체(Immutable Object) 가변객체 : 객체의 값을 변경할 수 있는 객체 불가변객체 : 객체의 값을 변경할 수 없는 객체 Python에서는 자료형 타입에 따라 가변 객체와 불가변 객체가 다음과 같이 나뉜다. 가변객체 불가변객체 리스트(list) 정수(int) 딕셔너리(dict) 실수(float) 집합(set) 문자열(string) 논리형(bool) 가변 객체(mutable object)의 경우, 객체의 값이 변경 가능하므로 얕은 복사(shallow copy)가 이루어지고, 불가변 객체(immutable object)의 경우, 객체의 값이 변경될 수 없으므로 깊은 복사(deep copy)가 이루어진다. li = [1,2,3,4] print(id..
Python 변수와 메모리 객체 Python에서 '모든 것'은 객체다. 변수, 클래스, 객체 모든 것이 객체라고 생각하면 된다. 객체는 변수(상태, 속성)와 메소드(기능)로 구성되어 있다. print((3).bit_length()) num = 3 print(num.bit_length()) str = "three" print(str.upper()) 예를 들어, 정수값이 담긴 객체에는 bit_length()와 같은 메소드가 존재하고 문자열이 담긴 객체에는 upper()나 lower()와 같은 메소드가 존재한다. 변수 Python에서 변수 역시 객체다. 다음 코드를 보자. num = 5 위 코드를 실행하면 num이라는 변수에 5가 저장되어 있다고 생각하기 쉽다. 하지만 실제 메모리를 들여다보면 아래 그림과 같다. 데이터 값 5는 객체에..