문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 이동문서 삭제토론 Python (문단 편집) === 순수 객체 지향 === Python에는 원시 타입(Primitive Type)이 존재하지 않으며, 모든 것이 객체로 취급된다. 나아가 클래스, 함수 역시 객체로 취급할 수 있다. 파이썬은 실행중 타입검사가 없어서 상수 역시 문법이 아닌 코딩규칙이고 파이썬이 검사하지않는다. 상수가 저장된 객체라고 본다. 다음과 같은 상수 할당문이 있을 때, {{{#!syntax python X = 10 }}} 이는 변수 x 자체에 10이 할당된 것이 아니라 x가 10이 저장된 상수 객체를 가리키는 것을 의미한다. 내부적으로는 C의 포인터 연산과 같은 동작이 행해지는 것이다. 이렇게 x에 대입되는 값을 변경할 경우, {{{#!syntax python X = 10 X = 20 }}} X가 가리키는 대상이 10이 저장된 상수 객체에서 20이 저장된 상수 객체로 바뀐 것이다. X 자체의 값이 10에서 20으로 바뀐 게 아니다. 파이썬에서 타언어의 상수와 같은것을 만들려면 클래스를 통해 불변객체를 만들어야한다면 ||[[파일:2-4-4.png|width=400]]|| Python 버전 3의 표준 타입 계층 구조에서 주요 자료형은 그림과 같다. 이 중에서도 크게 불변 객체(Immutable Object)와 가변 객체(Mutable Object)로 나눌 수 있다. 불변 객체에는 숫자, 문자열, 바이트, 그리고 튜플[* 튜플을 변경 불가능하게 막는 이유는 보안 때문이다.]이 있다. 이 네 가지를 제외한 나머지 객체는 모두 가변 객체이며, 값을 수정할 수 있다. 불변 객체의 값을 수정할 때는 바뀐 값이 저장된 새로운 객체를 생성하고 참조 대상을 새 객체로 옮기는 식으로 동작한다. 이와 같은 특징 때문에 Python은 순수 객체지향 언어라고 할 수 있고, 이와 같은 순수 객체 지향 언어의 또 다른 예로는 [[Ruby]]가 있다. 파이썬의 객체관련 문법은 클래스내 this 가 없고 self 키워드만 있는등 c++ 보다는 객체지향언어의 원조격인 [[Smalltalk|스몰토크]]언어에 영향을 많이 받았다.[* 루비, 오브젝티브c, 델파이 등이 그렇다.] 다만 객체 지향 언어라는 표현은 주의해서 사용할 필요가 있다. 객체 지향은 어디까지나 프로그래밍 패러다임이므로, Python이 객체 지향 언어임은 프로그램 작성이 항상 객체 지향으로 이루어진다는 의미는 아니다. 대부분 처음 Python을 배울 때는 절차 지향적으로 프로그래밍을 하게 되며, 심지어 함수형 프로그래밍도 할 수 있다. 함수의 매개 변수로 불변 객체를 넘겼냐 가변 객체를 넘겼냐에 따라서 함수 바깥에 있는 인자의 값도 수정할 수 있는지 없는지가 달라진다. 불변 객체를 넘겼으면 값의 복사만 일어나고 함수 바깥에는 영향을 주지 못하므로[* global이나 nonlocal 키워드를 사용하지 않았을 경우] '값에 의한 호출(Call by Value)'이 될 것이며, 가변 객체를 넘겼으면 함수 바깥에까지 영향을 줄 수 있으므로 '[[참조에 의한 호출]](Call by Reference)'이 될 것이다. Python 공식 문서에서는 Python의 인자 전달 방식을 '할당에 의한 호출(Call by Assignment)', 또는 '객체 참조에 의한 호출(Call by Object Reference)'이라고 명시하고 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기