실체는 실제로 존재하는것.
객체는 실체의 객관적 측면.
=> 객체란 자신의 속성을 가지고 있고 다른것과 식별가능한 것
객체는 속성과 동작으로 구성 속성=필드(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)라고 한다.
불변객체는 객체 생성이후 값을 변경할 수 없는 Object
ex) a = 1
b = 2
에서 b 값 수정시 저장되 있던 객체의주소 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값 변경
(수정된 값의 주소로 변경)