파이썬은 객체지향 언어다. 객체는 3가지 특성을 포함한다.
type()
으로 확인 가능, 데이터의 종류를 알려줌id()
으로 확인 가능, 각각의 객체를 식별하기 위한 고유번호(메모리상의 위치값)💡 객체는 값을 가지는 것이 아닌, 메모리에 존재하는 각각의 데이터를 가르킨다.
🔹 call by reference
list, dictionary, set가 있다. 이들은 인덱싱 슬라이싱이 가능하며 값을 수정할 수 있다. 이때 값을 변경하면 값을 복사하는 것이 아니라 값을 참조하는 객체의 식별 번호가 변경되는 것이다. 변수는 어떤 값에 대입하는지에 따라 값이 아니라 식별변호가 바뀐다.
** tuple은 인덱싱과 슬라이싱이 가능하나 값을 변경할 수 없다.
🔹 call by value
int, float, tuple, str, bool이 있다.
copy()
:
얕은 복사에서는 리스트 안의 모든 원소가 참조하는 곳까지 복사된다.즉 만약 s와 t가 같은 곳을 참조하고 있고 s의 원소값을 변경하면 참조하는 곳까지의 값이 변경된다. 즉 리스트 s가 참조하는 곳이 다르면 리스트 t도 달라진다.
deepcopy()
:
리스트의 원소뿐만 아니라 구성원소(원소의 원소)도 복사됩니다.깊은 복사는 참조값 뿐만 아니라 참조하는 객체 자체를 복사해 객체가 갖는 모든 멤버(값과 참조 형식 모두)를 복사하므로 전체 복사라고도 한다.
Reference:
Do it! 자료구조와 함께 배우는 알고리즘 입문
https://wave1994.tistory.com/40
https://hocheon.tistory.com/95