TIL # 16 : [Python] 불변, 가변 객체

셀레스틴 허·2020년 12월 22일
0
post-thumbnail

파이썬은 객체지향 언어다. 객체는 3가지 특성을 포함한다.

  1. value : 객체의 값, 메모리에 기억되는 내용
    ** 가변객체의 값은 변할 수 있지만 불변객체는 값 변경이 불가능함
  2. type : 객체의 유형 type()으로 확인 가능, 데이터의 종류를 알려줌
  3. id : 객체의 메모리 주소 id()으로 확인 가능, 각각의 객체를 식별하기 위한 고유번호(메모리상의 위치값)

💡 객체는 값을 가지는 것이 아닌, 메모리에 존재하는 각각의 데이터를 가르킨다.

가변객체(mutable) ➡️ 생선 후 값 변경 가능

🔹 call by reference
list, dictionary, set가 있다. 이들은 인덱싱 슬라이싱이 가능하며 값을 수정할 수 있다. 이때 값을 변경하면 값을 복사하는 것이 아니라 값을 참조하는 객체의 식별 번호가 변경되는 것이다. 변수는 어떤 값에 대입하는지에 따라 값이 아니라 식별변호가 바뀐다.

** tuple은 인덱싱과 슬라이싱이 가능하나 값을 변경할 수 없다.

불변객체 ➡️ 생선 후 값 변경 불가능

🔹 call by value
int, float, tuple, str, bool이 있다.


리스트 복사시 주의

얕은 복사(shallow copy)

copy() :

얕은 복사에서는 리스트 안의 모든 원소가 참조하는 곳까지 복사된다.즉 만약 s와 t가 같은 곳을 참조하고 있고 s의 원소값을 변경하면 참조하는 곳까지의 값이 변경된다. 즉 리스트 s가 참조하는 곳이 다르면 리스트 t도 달라진다.

깊은 복사(deep copy)

deepcopy():

리스트의 원소뿐만 아니라 구성원소(원소의 원소)도 복사됩니다.깊은 복사는 참조값 뿐만 아니라 참조하는 객체 자체를 복사해 객체가 갖는 모든 멤버(값과 참조 형식 모두)를 복사하므로 전체 복사라고도 한다.

Reference:
Do it! 자료구조와 함께 배우는 알고리즘 입문
https://wave1994.tistory.com/40
https://hocheon.tistory.com/95

profile
Software Developer / 고통은 필연, 괴로움은 선택

0개의 댓글