컴퓨터의 모든 동작은 비트 시퀀스를 통해 이루어진다. 컴퓨터는 다양한 크기와 타입 또는 컴퓨터 코드 자체로 원하는 방식으로 비트를 해석할 수 있다. 우리는 파이썬을 사용하여 목적에 맞게 비트 덩어리를 정의하여 CPU에 명령을 내려 결과를 주고받는다.
파이썬 데이터는 객체이다.
파이썬은 각 데이터 값(불리언, 정수, 부동소수점 숫자, 문자열, 자료구조 함수 및 프로그램)을 메모리에 객체로 래핑한다.
<파이썬에서 객체는 다음을 포함하는 데이터 덩어리이다>
- 타입 정의
- 다른 객체와 구별하기 위한 고유 ID
- 타입과 연관된 값
- 객체의 사용빈도를 추적하는 참조 횟수
> ID는 선반 위의 위치와 같은 고유 식별자이며, 타입은 상자에 있는 스탬프와 같으며 할 수 있는 것을 명시한다. 파이썬 객체가 정수면 타입은 int이고 객체는 int에 추가될 수 있다.
「파이썬 기본 데이터 타입」
이름 | 타입 | 가면 여부 (y/n) | 예 |
불리언 | bool | n | ture, flase |
정수 | int | n | 1,2,3 |
부동소수점 | float | n | 3.14, 1.8e4 |
복소수 | complex | n | 3i, 4j+7 |
텍스트 문자열 | str | n | 'herry', 'loan' |
리스트 | list | y | ["Nox", "Lumos"] |
튜플 | tuple | n | (2,3,4) |
바이트 | bytes | n | b'ab\xff' |
바이트 배열 | bytearray | y | bytearray(...) |
셋 | set | y | set([3,4,5]) |
프로즌 셋 | frozenset | n | frozenset(['elsa','winter']) |
딕셔너리 | dict | y | {'gmae': 'lol', 'brand": "riot"} |
「가변성 」
> 파이썬은 강타입 언어다. = 값은 병견 가능하지만 객체의 타입은 변경할 수 없다.
가변(mutable)=타입에 따라 상자에 포함된 데이터 값을 변경할 수 있다.
불변(immutable)=타입에 따라 상자에 포함된 데이터 값을 변경할 수 없다. 불변 객체는 밀봉된 상태로 생각할 수 있다.
파이썬에서는 데이터 값을 "리터럴", "변수"로 명시한다.
> 정수는 숫자 시퀀스이고, 부동소수점 숫자는 소수점을 포함하며 텍스트 문자열은 따옴표로 묵는다.
「변수」는 컴퓨터 언어의 핵심 개념이다. 대부분 언어와 마찬가지로 파이썬을 사용하면 프로그램에서 사용하려는 컴퓨터 메모리의 값 이름과 같은 변수를 정의할 수 있다.
「변수의 특징」
- 소문자, 대문자, 숫자, 언더바( _ )만 사용할 수 있다,
- 대소 문자를 구분한다.
- 숫자로는 시작할 수 없지만, 언더바로는 시작할 수 있다.
- 언더바로 시작하는 이름은 특별 대우를 받는다.
- 파이썬 예약어는 사용할 수 없다. > help("keyword")를 실행시키면 예약어를 찾을 수 있다.
파이썬은 = 을 사용하여 값을 할당한다 > 오른쪽 값을 왼쪽 변수에 할당 한다
x=5
y=x+9
y
- x에 5를 할당한다.
- y에 x+9를 할당하는데, x에는 이미 5가 할당된 상태 > 즉 y에는 5+9의 결과 값인 14를 할당한다
- y의 값은 14
※만약 y+x+9로 시작하면, 변수 x에 값이 없으므로 예외(오류) 처리된다.
변수는 단지 이름이다. 컴퓨터 언어마다 다르며 리스트와 같은 가변 객체를 얻을 때 알아야 하는 내용이다. 할당은 값을 복사하지 않고 데이터를 포함하는 객체에 이름을 붙인다. 이름은 객체 자체가 아닌 객체에 대한 참조이다.
> 파이썬은 어떤 타입이든 가리킬 수 있고, 데이터 객체 자체에 문자열을 따라서 값과 타입을 얻는다. 추가로 클래스는 객체이다.
> 파이썬에는 가비지 컬렉터가 있다: 객체의 참조가 0이면, 아무도 가리키는 이름이 없으므로 더 이상 필요하지 않은 공간의 메모리를 재사용하는 것. (Java에도 존재)
> 이름은 객체를 가리키기 때문에 이름에 지정된 값을 변경하면 이름이 새 객체를 가리킨다. 이전 객체의 참조 수가 감소하고 새 객체의 수가 증가한다.
> 변수가 모두 같은 가변 객체를 가리킨다면 두 이름 중 하나를 통해 객체 값을 변경할 수 있으며, 두 이름을 사용할 때 변경된 값이 사용된다.
「식별자」
- 캐멀케이스(대문자로 시작) > 클래스 ex class Animal:
- 스네이크 케이스(소문자로 시작) > 뒤에 괄호가 있으면 "함수" ex: print( ), 없으면 "변수" ex: math.pi
「숫자」
- boolean: True or False
- 정수: 42, 1000000과 같은 숫자
- 실수: 3.14 1592와 같이 소수점이 있는 숫자 혹은 (100000000=1.0e8)과 같은 지수
「boolean 불리언」
불리언 데이터 타입의 유일한 값은 True or False이다. 이 값을 직접 사용하기도 하지만, 진위 확인을 위해서 사용하기도 한다. 또한 파이썬의 특수 함수들은 데이터 타입을 모두 boolean으로 한다.
> bool( ) 함수는 어떤 값을 인수로 취해서 불리언 값을 반환한다
bool(True)
bool(1)
bool(45)
bool(-45)
> 결과는 모두 True. 이유: 0이 아닌 값은 모두 False로 간주한다.
bool(False)
bool(0)
bool(0.0)
> 결과는 모두 False. 이유: 0인 값은 모두 False로 간주한다.
「정수」
정수 연산자
연산자 | 설명 | 예 | 결과 |
+ | 덧셈 | 1 + 2 | 3 |
- | 뺄셈 | 95 - 45 | 50 |
* | 곱셈 | 4 * 9 | 36 |
/ | 부동소수점 나누기 | 9 / 2 | 4.5 |
// | 정수나누기(소수점 이하 버림) | 9 // 2 | 4 |
% | 나머지 | 9 % 2 | 1 |
** | 지수 | 2 ** 3 | 8 |
※0으로 나누면 예외가 발생한다.
「진수」
정수 앞에 진수를 붙이지 않으면 10진수로 간주한다. 보통 10진수 이외의 진수는 사용 빈도가 낮다.
- 2진수(binary): 0b or 0B
- 8진수(octal): 0o or 0O
- 16진수(hex): 0x or 0X
> IDE에서 리터럴 정수를 입력하면 10진수로 출력한다.
10 //결과:10
0b10 //결과:2
0o10 //결과:8
0x10 //결과:16
> 10진수에서 다른 진수로 계산할 수 있다. 단 결과는 문자열로 반환된다.
value=65
bin(value) //결과:0b1000001
oct(value) //결과:0o101
hex(value) //결과:0x41
char(65) //결과:'A'
ord('A') //결과:65
「타입 변환」
int(True) 결과값: 1
int(False) 결과값:0
bool(1) 결과값:True
bool(0) 결과값:False
int(98.8) 결과값:98
int(1.0e4) 결과값:10000
bool(1.0) 결과값:True
bool(0.0) 결과값:False
int('99') 결과값:99
int('-23') 결과값:-23
int('1_000_000) 결과값:1000000
int('10',2) #2진수 결과값:2
int('10',8) #8진수 결과값:8
int('10',16)#16진수 결과값:16
int('10',22)#22진수 결과값:22
4+9.2 결과값:13.2
> int의 크기는 cpu에 따라 32 bit or 64bit로 제한된다.
> 32bit는 -2,147,483,648~2,147,483,647까지이다.
> long은 더 많은 공간을 제공한다. 64bit에서 -9,223,372,036,854,775,808~9,223,372,036,854,775,807까지 이다. ("python3"에서는 long이 사라지고 int의 크기가 유연해졌다. )
> 만약 컴퓨터가 허용한 공간보다 더 많은 공간을 차지한다면 정수 오버플로(overflow)가 발생한다.