파이썬 오브젝트, 클래스 짚고가기

hou·2022년 1월 10일
0

객체 지향 언어 파이썬

string, list, function, modules까지
파이썬은 모든게 object이다.

여기서 객체(object)란 변수와 함수의 집합을 말한다.

객체 지향의 장점은 클래스로 한 묶음을 만들어버리고 필요할 때마다

파이썬 내장함수인 id()를 이용해서 identity를 알아볼 수 있는데 메모리 주소를 뜻한다.

i = 5

print(id(i), id(5))
>>> 94838556064384 94838556064384

둘 다 같은 메모리값의 주소를 포인터 형태로 가리키고 있음을 확인할 수 있다.


앝은 복사와 깊은 복사

얕은 복사는 포인터를 복사하는 것이고
깊은 복사는 주소에 해당하는 값을 새로 재할당하는 것이다.
이런 얕은 복사와 깊은 복사로 포인터를 더 알아볼 수 있다.

# 얇은 복사
test = [1, 2, 3]
copy_test = test

test.append(4)
print(copy_test)
print(id(test), id(copy_test))
>>> [1, 2, 3, 4]
>>> 139824223227728 139824223227728

# 깊은 복사
import copy
test = [1, 2, 3]
deep_cp = copy.deepcopy(test)

print(deep_cp)
print(id(test), id(deep_cp))
>>> [1, 2, 3]
>>> 139824223080528 139824223638464

하지만 객체의 mutable과 immutable의 특성에 따라 달라질 수 있다.
immutable한 객체에 얇은 복사의 형태로 새로 할당을 해주면 기존 주소에 내용 추가가 아닌 새로 재할당이 된다.


profile
할 수 있다

0개의 댓글