2023. 10. 23. 17:46ㆍ프로그래밍 공부/Python
6.1 소프트웨어 객체
6.1.1 객체란?
객체(Object)에는 인스턴스 변수(Instance Variables) 집합에 저장된 속성 집합과 동작을 제공하는 메소드(Method)라는 함수 집합이 포함된다.
절차적 프로그래밍 접근

객체적 프로그래밍 접근

6.1.2 객체 참조
파이썬에서의 참조
참조(reference): 다른 개체의 위치를 참조하는 값, 즉 " 가리키는" 값
참조된 값(dereferenced value): 참조가 가리키는 값
내장된 함수 id: 변수의 참조 값을 결정할 수 있다.



>>> id(n) >>> id(k) >>> id(s)
505498136 505498136 505498296
참조의 할당
한 변수가 다른 변수에 할당될 때는 참조 값(reference value)이지, 참조된 값(dereferenced value)이 할당되지 않는다.

>>> id(k) >>> id(k) == id(n)
505498136 True
>>> id(n) >>> n is k
505498136 True

메모리 재할당과 가비지 컬렉션
가비지 컬렉션(Garbege Collection): 메모리에서 더 이상 사용되지 않는 위치를 결정하고 할당을 해제하는 방법
리스트 할당과 복사
>>> list1 = [10, 20, 30]
>>> list2 = list1

>>> list1[0] = 5
>>> list2[0]
5
>>> list2 = list(list1)

>>> list1[0] = 5
>>> list2[0]
10
반면 서브 리스트를 포함한 경우의 예시를 들어보자
>>> list1 = [[10, 20], [30, 40], [50, 60]]
>>> list2 = list(list1)

리스트 생성자 list()는 리스트의 최상위 레벨의 복사본을 만든다.
하위 목록(하위 수준) 구조가 공유되는 경우 얕은 복사본(Shallow Copy)이라고 한다.
만약 한 리스트의 가장 높은 수준 원소를 재지정한다면 (예를 들어, list1[0] = [70, 80]) 나머지 리스트는 변하지 않는다.

하지만 서브리스트 중 하나를 변경한다면 (예를 들어, list1[0][0] = 70) 다른 리스트에서 해당 변경이 이루어질 것이다.
즉 list2[0][0] = 70 이 된다.

깊은 복사(deep copy) 연산은 목록의 완전한 복사본을 만든다.
깊은 복사 연산자는 파이썬에서 copy 모듈의 메소드 deepcopy에 의해 제공된다.
>>> import copy
>>> list2 = copy.deepcopy(list1)
