5/11 컴퓨터 싸이언스 with 부트캠프 (인코딩, 함수, call by reference, call by value)

1.인코딩


아스키->유니코드->UTF순으로 진행

아스키코드는 7비트를 사용하는 문자열이라서 0~127개까지의 문자만 표현 가능
다양한 문자를 표현할 수 없어서 이를 보완하기 위해 유니코드 포맷이 등장했다. (U+AC00 형태이다.)
UTF은 유니코드 인코딩 방식 중 하나인데, 유니코드가 구체적으로 어떤 방법으로 UTF가 되었는지는 지금 단계에선 잘 모르겠고 굳이 필요하지 않은 것 같다.
일단은 그냥 유니코드 코드포인트를 가진 문자들을 최소 1바이트~최대 4바이트까지 할당한다는 사실만을 알아두자.

utf8- 문자를 1바이트~4바이트까지 담는다.
utf16 - 문자를 2바이트 or 4바이트로 담는다.
utf32 - 문자를 4바이트로 담는다.


2. 함수


함수 안에서 함수를 정의할 때도 지역변수, 전역변수 개념이 inner함수, outer함수에 각각 적용 된다. 따라서 inner함수에서 outer함수의 변수를 쓰려면 변수명 앞에 'nonlocal'을 명시해주어야 한다.

함수는 실행될 때 스택프레임이라는 것이 생긴다.
생성한 변수들은 이 스택프레임이라는 것의 밑바닥 부터 차곡차곡 쌓인다.
함수호출이 끝나면 스택은 사라진다.

이 개념을 알면 call by reference, call by value도 이해할 수 있다.

call by value

call by reference


함수인자로 변경이 불가능한 객체를 전달하면 값을 변경할 수 없다.
그 이유는 함수 안에서 변경 불가능한 객체는 새로운 객체로 만들어지고 함수 호출이 끝나면 스택 프레임이 사라지며 참조도 사라진다.

함수 내부에서 객체를 새롭게 할당해야만 값을 변경할 수 있는 객체는
변경불가능 객체인 상수, 문자열, 튜플 뿐이다.

리스트나 딕셔너리 같은 변경 가능한 객체도 함수 안에서 만들면
함수 호출이 끝나며 객체는 사라진다.

변경가능한 객체를 인자로 전달할 때도 인자로 전달 된 값에 접근해서 값을
바꾸어야 함수를 호출한 객체를 변경할 수 있다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용