파이썬 기초1

ganta·2021년 1월 19일
0

파이썬 기초

목록 보기
1/9
post-thumbnail
post-custom-banner

최근 데이터 분석, 머신러닝, 딥러닝까지 연구가 활발히 진행이 되어지고 이에 빠질 수 없는 언어는 파이썬입니다.

따라서, 본격적인 딥러닝 공부를 하기 전에 있어서 파이썬에 대한 기초적인 이론을 공부하고 정리한 내용을 정리해 보았습니다.

컴퓨터에 대한 기초 지식


컴퓨터 OS

OS(Operating System)

  • 우리의 프로그램이 동작할 수 있는 구동 환경
  • APP(Application) - OS ↔ CPU + MEM

각각의 파일들은 각각의 OS에서만 작동 될 수 있는 파일들이 존재한다

  • exe파일의 경우 윈도우에서만 사용이 가능(MAC에서는 추가적인 작업이 필요)
  • 파이썬 언어 같은 경우 인터프리터 방식으로 각각의 OS에 맞게 기계어로 바뀌어 운영체제에서 독립적이다 → OS dependence

결론

  • 어떤 개발 환경에서 개발을 실행할 것인가 선택하는 것은 중요한 요소

파일 시스템

파일 시스템(File System)

  • OS에서 파일을 저장하는 트리구조 저장 체계

디렉토리

  • 퐅러, 디렉토리라는 명칭을 주로 사용
  • 파일, 다른 디렉토리 포함 가능

파일

  • 컴퓨터에서 정보를 저장하는 논리적 단위

  • 파일명 + 확장자 구조 ex) test.py

  • 실행,쓰기, 읽기등 각각의 파일들에는 권한이 존재

  • 파일 권한은 읽기, 쓰기, 실행의 권한으로 나뉘어져 있다

  • 접근 권한은 사용자 카테고리 별로 나뉘어져 있으며 표기 상태는 다음과 같다.

  • 접근 권한 변경 명령어는 chmod를 사용하며 파일의 소유자나 시스템 관리자는 접근 권한을 바꿀 수 있다. 일반 사용자는 소유자 자신의 접근 뿐만 아니라 그룹과 기타 사용자의 권한도 변경가능하나 다른 사용자가 소유한 파일의 접근 권한은 손댈 수 없다.(기호모드 - 접근 권한을 변경하기 위해 문자와 기호를 사용하여 권한을 표시, 숫자모드 - 접근 권한을 변경하기 위해 숫자를 사용)

  • 파일 경로

    • 컴퓨터 파일의 고유 위치, 트리구조상 노드 연결
    • 절대 경로 : 루트 디렉토리부터 파일 위치까지의 경로를 말함
    • 상대 경로: 현재 있는 디렉토리부터 타깃 파일까지의 경로

터미널

  • 마우스가 아닌 키보드로 명령을 입력 → 프로그램 실행

운영체제 컨트롤 방법

  • GUI(Graphical User Interface) : 화면으로 사용자가 OS 조작이 가능
  • CLI(Coomand Line Insterface) : 명령어로써 사용자가 OS조작이 가능

터미널의 기본 명령어

  • 각 터미널에는 프로그램 작동하는 shell이 존재 → 명령어는 shell을 통과하여 기계어로 만들어지고 core로 전달하여 작동이 되어짐

  • shell의 종류: powershell, CMD창, bash창, zsh창

  • 각각의 명령어 종류

    윈도우 - CD, shell - cd / 디렉터리 변경

    윈도우 - CLS, shell -clear / 콘솔 화면에 있는 모든 명령어들을 지워줌

    윈도우 - mkdir, shell - mkdir / 디렉터리 생성

    윈도우 dir, shell - ls / 하위 목록 조회

    윈도우 - copy , shell - cp/ 파일 복사

    윈도우 - DEL, shell- rm/ 파일 삭제

파이썬 특징


  • 플랫폼 독립적
  • 인터프리터 언어
  • 객체지향 언어
  • 동적 타이핑 언어
  • 처음 C언어로 구현이 되어 있음
  • 쉬운 문법
  • 다양한 라이브러리(특히, 통계와 데이터분석)
  • 효과적인 메모리 관리 구조
  • 고수준의 내장 객체 자료형
  • 높은 확장성과 내장 기능

플랫폼 독립적이란?


  • 운영체제와 상관없이 실행이 가능
  • 파이썬 → 각각 운영체제에 맞게 번역(인터프리터 프로그램 설치)

객체 지향적 언어


  • 실행 순서가 아닌 단위 모듈(객체) 중심으로 프로그램 작성, 하나의 객체→ 목적 달성을 위한 행동과 속성을 가짐

동적 타이핑 언어


  • 프로그램이 실행하는 시점에 프로그램이 사용해야 할 데이터에 대한 타입을 정함

고수준의 내장 객체 자료형


  • 일반적으로 사용되는 리스트(list), 사전(Dictionary) 및 문자열, 튜플(Tuple)등의 자료구조를 제공

높은 확장성과 내장 기능


  • 다른 언어나 라이브러리에 쉽게 접근하여 사용이 가능(특히 C언어와 잘 결합)
  • 기존의 C 프로그램을 파이썬과 결함시킬 수 있으며 소스 없는 라이브러리도 wrapper함수(라이브러리의 함수를 중간에서 호출해주는 간단한 인터페이스)만 써 주면 파이썬에서 사용이 가능
  • C등 다른 언어에서 파이썬을 호출 할 수 있고, 그 응용 프로그램에서 내장시켜 사용할 수 있다. 파이썬에서 C모듈을 호출하는 것도 가능하다

파이썬의 메모리 구조


  • 코드 영역 : 실행할 프로그램의 코드가 저장, CPU는 코드 영역에 저장된 명령어 하나씩 가져가 처리
  • 데이터 영역 : 전역변수와 정적 변수를 저장하는 공간이며 프로그램 시작과 함께 할당하며 프로그램 종료시 소멸
  • 스택 영역 : 지역변수와 매개변수를 저장하는 공간이며 함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸
  • 힙 영역 : 사용자의 동적 할당으로 생성되는 공간, 사용자 가 공간의 크기를 직접 관리

스택 영역

  • 스택 프레임 : 해당 영역에 저장되는 함수의 호출 정보
  • 함수가 호출되면 push, 끝이 나면 pop

힙 영역

  • 런타임에 크기가 결정이 됨

  • 파이썬은 동적 할당의 기능이 존재하지 않음(메모리를 관리해주는 특별한 기능 존재 - Memory Manager)

  • Memory Manager

    1, 포인터를 움직여 힙 영역의 메모리 할당 범위와 내부 버퍼 조정

    2, Python/C API를 통하여 스토리지를 동적으로 관리

    3, 동적 관리 필요 경우 - 공유(sharing), 메모리 세분화(segmentation), 메모리 사전할당(preallocation), 캐싱(caching)

    4, 힙 안의 메모리 영역을 인터프리터가 포인터를 사용하여 영역의 범위를 조정, 인터프리터가 자동으로 메모리를 OS로 할당하지 않고 가지고 있다가 사용될 때 메모리를 재사용 하는 방식 → os과부화를 덜어줌

    <파이썬 메모리 구조>

    -1 : OS의 영역

    +1 (가장 낮은 레벨): raw memory allocator가 운영체제와 소통하면서 heap 영역 안에 데이터가 들어가 자리가 있는지 확인

    +3 (제일 높은 레벨) : Object-specific memory가 힙 영역을 담당하고 변수 타입에 따라 달라지는 저장방식 때문에 각각의 타입에 맞게 힙에 저장

결론

  • 파이썬은 가비지 콜렉터와 같은 매커니즘을 가지고 있으며 변수와 함수가 호출 될 때 마다 그에 맞는 메모리를 Python Memory Manager가 운영체제와 소통하며 할당,회수

컴파일러 VS 인터프리터


컴파일러

  • 작동방식

    • 소스코드를 기계어로 먼저 번역

    • 해당 플랫폼에 최적화되어 프로그램 실행

  • 장점

    • 실행속도가 빠름
  • 단점

    • 한번에 많은 기억 장소 필요
  • 주요언어

    • C, C++, C#

인터프리터

  • 작동방식

    • 별도의 번역과정 없이 소스코드를 실행시점에서 해석하여 컴퓨터가 처리 할 수 있도록(한줄한줄 번역)
  • 장점

    • 간단히 작성, 메모리가 적게 필요
  • 단점

    • 실행속도 느림
  • 주요언어

    • 파이썬

인터프리터 세부설명

CPython
  • Python은 C구현(구현체는 CPython)

  • CPython은 인터프리터이자 컴파일러 → 작성된 python코드를 bytecode로 컴파일 하고 실행(C언어로 바꾸는 것이 아닌 컴파일 하여 bytecode로 바꾸고 그 다음 interpreter가 실행)

  • .py파일 → .pyc파일 생성(CPython이 컴파일 한 bytecode가 들어있음) → .pyc를 interpret하는 것도 CPython

  • CPython의 단점

    • GIL(Global interpreter lock) 사용
      bytecode를 실행할 때에 여러 thread를 사용하는 경우 전체에 lock을 걸어서 한번에 단 하나의 thread만이 python object에 접근하도록 제한

      단일 스레드 일시 문제가 없고 도완하기 위한 많은 방법들이 존재

Jython
  • python코드를 java 바이트코드로 만들어 JVM에서 실행할 수 있도록 한다
  • .py → .class파일로 컴파일
PyPy
  • RPython으로 컴파일된 인터프리터, C로 작성된 RPython 툴체인으로 인터프리터 소스에 JIT컴파일을 위한 힌트를 추가해 CPython보다 빠른 실행 속도를 가짐

  • python자체로 구현, JIT컴파일 도입하여 CPython보다 빠르다

  • JIT(Just - in - time)컴파일러

    인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일 하여 네이티브 코드로 변경하고, 이 이후에는 해당 메서드를 더이산 인터프리팅하지 않고 네이티브 코드로 직접 실행하는 방식

  • RPython(Restricted Python)

    실행 추적 JIT 컴파일을 C로 구현해 툴체인을 포함

    RPython으로 인터프리터를 작성하고 툴체인으로 힌트를 추가하면 인터프리터에 실행추적 JIT컴파일러를 빌드(RPython은 PyPy 프로젝트팀이 만든 일종의 인터프리터 제작 프레임워크 언어, 표준 라이브러리와 문법에 제약을 가해 변수의 정적 컴파일이 가능하도록 RPython을 만들었으며, 동적 언어 인터프리터를 구현하는데 사용)

  • 언어사양(파이썬 언어 규칙, BF 언어 규칙 등)과 구현(실제 인터프리터 제작)을 분리함으로써 어떤 동적 언어에 대해서라도 자동으로 JIT컴파일러 생성 가능하게 됨

Reference

Naver BoostCamp AI Tech - edwith 강의

https://cjh5414.github.io/about-python-and-how-python-works/

https://lgphone.tistory.com/m/128?category=913302

https://catch-me-java.tistory.com/11

https://has3ong.github.io/pypy-cpython/

https://armontad-1202.tistory.com/entry/파이썬의-메모리-영역

https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F

profile
한걸음씩 꾸준히
post-custom-banner

0개의 댓글