🐍 파이썬의 특징 - 1
- 파이썬(Python)은 플랫폼(OS, 운영체제) 독립적인(OS에 상관없이) 인터프리터 언어이다.
인터프리터 언어란?
C, JAVA 등 컴파일러 언어와 달리 별도의 번역과정 없이 소스코드를 실행시점에 해석하여 컴퓨터가 처리할 수 있도록 하는 언어이다. (소스 코드 실행기 프로그램)
= 컴퓨터에 명령을 내리려면 기계어가 필요, 인터프리터는 컴파일러처럼 소스 코드를 기계어로 번역하는 행위를 하지만 번역한 후 그 즉시 프로그램을 실행하지는 않는 컴파일러와 다르게 번역과 분석이 끝나면 프로그램을 실행하여 결과를 바로 내놓는다.
또 컴파일러는 기계어로 번역을 한 후 목적 파일을 생성하는 반면 인터프리터는 그렇지 않다. => 컴파일러 단점 : 컴파일 시 전체 프로그램 코드가 생성되므로 한 번에 많은 기억장소가 필요하다 // 장점 : 컴파일이 끝난 프로그램은 완전히 분석된 상태이므로 다시 코드를 분석할 필요 없이 바로 실행할 수 있다(실행속도가 빠르다) + 최적화가 용이하다.
인터프리터 단점: 실행 중에 동적으로 소스 코드를 분석하고, 최적화가 어려우며, 실행 중에 매번 분석을 진행하므로 컴파일러보다 실행속도가 느리다. 장점 : 결과를 바로 확인할 수 있으며 컴파일 하는데 시간이 걸리지 않는다, 번역 시 그때그때 필요한 실행 코드를 생성하므로 사용하는 메모리가 적다.
🐍 파이썬의 특징 - 2
- 파이썬은 객체 지향 동적 타이핑 언어다.
객체 지향 언어란?
: 실행 순서가 아닌 단위 모듈(객체) 중심으로 프로그램을 작성
하나의 객체는 어떤 목적을 달성하기 위한 행동(method)과 속성(attibute)을 가지고 있다.
동적 타이핑(Dynamic Typing) 언어란?
: 프로그램이 실행하는 시점에 프로그램이 사용해야할 데이터에 대한 타입을 결정한다.
+) 자바스크립트는 무슨 언어일까?
인터프리터 언어. 하지만 플랫폼에 따라 엔진 내부에서 컴파일 과정을 거친다. [참고 : JavaScript, 인터프리터 언어일까?]
+ 객체 기반의 스크립트 프로그래밍 언어
- 스크립트 언어(scripting language) : 응용 소프트웨어를 제어하는 컴퓨터 프로그래밍 언어, 스크립트 언어는 응용 프로그램과 독립하여 사용되고 일반적으로 응용 프로그램의 언어와 다른 언어로 사용되어 최종사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행할 수 있도록 해준다.
🌟 변수의 의미
변수(variable)란?
: 데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름
변수는 메모리 주소를 가지고 있고 변수에 들어가는 값은 메모리 주소에 할당된다.
변수가 선언되는 순간 메모리 특정 영역에 물리적인 공간이 할당된다.
현대 컴퓨터는 폰 노이만의 구조를 따르고 있는데 이는 값을 입력하거나 프로그램을 실행할 경우 그 정보를 먼저 메모리에 저장⭐️시키고 CPU(연산장치 + 제어장치 + 레지스터로 구성)가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결괏값을 전달하는 것이다.
[참고 : 2023.01.14 - [CS] - [CS]컴퓨터 주요 구성 요소(CPU, Memory, IO Devices, System Bus), 메모리 계층과 각 메모리 특징]
프로그래밍에서 변수는 값을 저장하는 장소이고, 변수는 메모리에 주소를 가지고 있고 변수에 들어가는 값은 메모리 주소에 할당된다.
A = 1
즉 위 코드 'A = 1'은 A라는 이름을 가진 메모리 주소에 1을 저장하라는 의미이다.
'='의 의미는 '같다'가 아닌 메모리 주소에 해당 값을 '할당(연결)'한다는 의미이다.
A = [5, 4, 3, 2, 1]
B = [1, 2, 3, 4, 5]
B = A
B # [5, 4, 3, 2, 1]
참고로 List(시퀀스 자료형, 여러 데이터들의 집합)에서 위와 같이 B = A를 해주면
A의 메모리 주소를 B도 참조해 같은 메모리 주소를 가리키게 되어 같은 값이 나오는 것이다.
A = B를 해주면 A가 B의 메모리 주소를 가르켜 A의 값이 B와 같아지고, B = A를 해주면 B가 A와 같은 메모리 주소를 가리켜 A와 같은 값이 된다.
같은 메모리 주소를 가르키기 때문에 A나 B의 값을 수정하면 B, A도 같이 수정된다.
헷갈리면 직접 해보자.
🐍 파이썬의 List
list에 있는 값들은 주소(offset)를 가진다 => 주소를 사용해 할당된 값을 호출한다.
list명[시작 index : 끝 index : step ] => list에서 시작 index부터 끝 index까지 step단계로(예_ 두 개씩) 값을 호출
list명[ : ] => list 전부 가져온다. // list명[ : : -1 ] => list 거꾸로 전부 가져온다.
a = [1, 2, 3]
b = a[ : ]
리스트 복사는 이렇게 되지만 참고로 이중 리스트(리스트 안에 리스트, 예_ [[1,2], [3,4]])는 이런 방법으로 복사할 수 없기 때문에 copy 라이브러리를 사용해야 한다.
import copy
a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
🐍 파이썬 기본 데이터 유형
🌟 컴퓨터의 이진수
파이썬에서는 자유로운 형 변환이 가능한데
a = 10
print(a) # 10 정수형
a = float(10)
print(a) # 10.0 실수형
b = 15.6
b = int(b)
print(b) # 15
실수(float) 형에서 정수(int) 형으로 변환 시 소수점 이하 내림이 된다.
파이썬 예전 버전(2.7)에서는 반올림 오차가 났었는데 그 이유는 단순한 실수를 이진수로 변환하면 무한소수가 되기 때문이다. => 0.1이 1이 될 때까지 계속...
컴퓨터에서는 하나의 숫자를 나타내기 위한 메모리의 크기가 제한되어 있어서 특정 소수점 이하는 생략하고 가장 비슷한 숫자로 표현된다.
0.1 + 0.2 == 0.3 # False
0.1 + 0.2 # 0.30000000000000004
# 실수의 생략된 소수점을 보고싶다면 %precision 55 명령어를 사용한다(소수점 55자리까지 표현)
%precision 55
0.1 # 0.1000000000000000055511151231257827021181583404541015625
0.2 # 0.2000000000000000111022302462515654042363166809082031250
round(0.1 + 0.2, 5) == round(0.3, 5) # True
따라서 실제 실수 소수점 뒤의 값이 생략되어 표현됐기 때문에 실수를 계산할 때 미세한 오차를 가질 수 있으므로 round() 명령을 사용하여 유효숫자를 지정한 반올림을 한 후에 비교해야 한다. => round()는 두 번째 인수로 반올림할 소수점 이하의 유효숫자의 개수를 받는다.
이진수 십진수 변환기 등을 써봤을 때 설명 없이 실수도 간단히 변환되길래 이 부분에 대해서는 생각 못했는데 뒤에 생략한 소수점이 있었다. 이런 점들을 살펴보니 재밌었다.
더 자세한 내용은 실제 강의를 들어보길 추천한다.
※ 위 내용은 부스트코스(boostcourse) 인공지능(AI) 기초 다지기 강의를 듣고 공부하며 내용을 정리한 글입니다.
네이버 부스트코스에서 진행하는 코칭스터디 8기 <Data Science>를 수료하고 도움이 되어서 9기 <AI Basic 2023>도 신청했는데 뽑혀 이번주부터 스터디가 시작했다. 파이썬 기초는 이미 배운 상태였지만 강의를 들어보니 자세하게 더 설명해 주는 내용이 있어 다시 상기시키며 공부할 점이 많고 인공지능에 대해 무료로 배울 수 있다는 점에 앞으로 기대가 된다 😎
추가 참고 사이트
'프로그래밍 > Python' 카테고리의 다른 글
[인공지능(AI) 기초 다지기] Python 자료 구조(Data Structure) : Stack & Queue, Dict, Collections (0) | 2023.01.19 |
---|---|
[인공지능(AI) 기초다지기] Python의 문자열(String)과 함수 / Swap, 재귀 함수 (0) | 2023.01.19 |
[인공지능(AI) 기초다지기] Python의 조건문과 반복문, 연습 문제 풀기 (0) | 2023.01.16 |
[인공지능(AI) 기초 다지기] Python 소수점 자리 지정하기 format (0) | 2023.01.16 |
PEP 8 - Style Guide for Python Code 정리 / Python Code 일관성, 가독성 높이며 작성하기 (0) | 2022.11.03 |