가변객체 불변객체

정현석·2020년 9월 17일
1

python

목록 보기
1/3

객체란

실체와 객체??

실체는 실제로 존재하는것.
객체는 실체의 객관적 측면.
=> 객체란 자신의 속성을 가지고 있고 다른것과 식별가능한 것
객체는 속성과 동작으로 구성 속성=필드(field) 동작=메서드(method)

데이터 타입

가변(mutable) list, set, dict
불변(immutable) int, float, bool, tuple, string, unicode

가변객체

가변객체는 함수를 전달할 때, 가변객체의 내용이 변할 수 있다.

example = [1,2,3,4,5]
copy = example
print(id(example), example)
(4502187904, [1, 2, 3, 4, 5])
print(id(copy), copy)
(4502187904, [1, 2, 3, 4, 5])

example.pop()
print(id(example), example)
(4502187904, [1, 2, 3, 4])
print(id(copy), copy)
(4502187904, [1, 2, 3, 4])

copy는 example의 배열 값 자체를 복사하지 않고 가리키는 주소를 복사했으므로

example의 값이 변경되면 copy도 같은 값을 가리키면서 값이 변경된다.

-> 이러한 복사를 얕은 복사(shallow copy)라고 한다.

example과 copy는 값 자체를 복사하는 것이 아니라 example이 가르키는 주소를 copy가 가리켜서 값이 나타나는 것이다.

ex) a=b b의 값이 a에 복사되는 것이 아니라 주소를 가르키는것.

불변객체

불변객체는 객체 생성이후 값을 변경할 수 없는 Object
ex) a = 1
b = 2
에서 b 값 수정시 저장되 있던 객체의주소 id값이 변경된다.

b=2의 주소에서 b=3 변경시 3의 객체의 주소를 가리키면서 id값 변경

만약 b 값이 1이 되었을 경우는 a의 객체의주소 id를 가리킨다.

a = 3
b = 5
c = 7
print(id(a),id(b),id(c))
(140468310543096, 140468310543048, 140468310543000)

여기서 c의 값을 수정해보자.

...
c = 10
print(id(a),id(b),id(c))
(140468310543096, 140468310543048, 140468310542928)

값이 변경 되면 c의 값의 주소를 가리키면서 id값 변경
(수정된 값의 주소로 변경)

profile
기록하는 벨로그

0개의 댓글