티스토리 뷰

👉  자주 쓰이는 데이터 형

숫자 정수(int)  -30, -46656, 0, 23, 333 ...
실수(float)  -0.3737, -376.0, 0, 3.14, 256.333 ...
복소수(complex)  실수와 허수의 합의 꼴로써 나타내는 수
문자열(string)   'a', 'b', 'abc', 'apple', 'I am happy!', “안녕하세요”
불(boolean)   True, False
리스트  ['홍길동', 32, '010-2222-3333', 'hong@korea.com']
튜플  ('짜장면', '짬뽕', '탕수육', '우동')
딕셔너리  {'red':'빨간색', 'yellow':'노란색', 'blue':'파란색', 'green':'초록색'} 

 

👉  정수형 (Integer)

n1, n2, n3, n4, n5 = 33, -44, 0, 7, 88, 38784

✔  정수는 음수, 0, 양수로 구성된 숫자를 말한다. (파이썬에서는 unsigned를 제공하지 않는다)

✔  데이터 타입마다 크기가 정해져 있는 다른 프로그래밍 언어와 다르게, 파이썬에서는 정수에 크기가 정해져 있지 않다.

✔  그렇기 때문에 메모리가 허용하는 한 무한대의 정수를 다룰 수 있다. 이는 속도가 떨어지는 원인이기도 하다.

online = 0
offline = 1

✔  프로그래밍에서 정수는 정보를 압축해 사용하기도 한다.

✔  예를 들어 온라인 상태라면 0, 오프라인이라면 1로 표현할 수 있다.

✔  이런 경우 크기가 정해지지 않은 정수를 사용한다면, 메모리 낭비가 클 수밖에 없다.


+12		0000 0000 0000 1100

 10진수로 표현된 정수 12를 2진수로 표현하면 1100이다.

✔  그렇다면 -12를 2진수로 표현하려면 어떻게 해주어야 할까?

+12		0000 0000 0000 1100
-12		1000 0000 0000 1100 (+)
		1000 0000 0001 1000

✔  가장 첫 번째 비트는 부호 비트이다. 양수라면 0, 음수라면 1로 표현한다.

✔  첫번재 비트를 음수를 의미하는 1로 바꾸어 주었다. 이렇게 되면 -12인지 확인해보자.

✔  같은 절댓값을 가지고 부호가 다른 값을 서로 더해주면 0이 되어야 한다. (예) 12 + (-12) = 0

✔  부호 비트를 바꾸어 준다 해도 이는 음수가 아님을 알 수 있다.

+12		0000 0000 0000 1100  #1의 보수 구하기
		1111 1111 1111 0011  #1 더하기
		1111 1111 1111 0100  #절대값이 같은 음수
              
+12		0000 0000 0000 1100
-12		1111 1111 1111 0100 (+)
		0000 0000 0000 0000

✔  음수로 2진수를 표현하기 위해서는 먼저 같은 절댓값을 가지는 양수의 1의 보수를 구해야 한다.

  그다음 1의 보수에 +1 해주어 2의 보수를 구하면 된다.

  그리고 두 수를 더해보면 0이 나오는 것을 확인할 수 있다.

 

    r 진법 수 : ( r - 1 )의 보수 + 1 = r의 보수

 

  합이 0 이 된다는 것은 결국 자릿수가 하나 증가하여 0 이 된다는 것을 의미한다. 

  즉, 10진수의 경우 한자리 수에서 두 자릿수로 넘어가는 10의 보수를, 2진수의 경우는 2의 보수를 구하면 된다.

  만약 이를 구하기 어려운 경우 먼저 -1 한 보수를 구하고(10진수는 9의 보수, 2진수는 1의 보수)

  1을 더해주면 좀 더 쉬운 연산이 가능하다. 공식처럼 기억해두자.

(예) 8의 10의 보수 = 2 / 8의 9의 보수 = 1 → +1 하면 10의 보수 값과 같다.


16진수 접두사 	: 0x
2진수 접두사 	: 0b
8진수 접두사	: 0o

✔  정수는 일반적으로 10진수로 표현하지만 2진수, 8진수, 16진수로도 표현할 수 있다.

✔  기본적으로 2진법, 8진법, 16진법은 양태 표현만이 가능하므로, 음수가 존재하지 않는다.

✔  진법을 바꾸는 아래 함수들은 오차가 발생할 수 있으니 사용하지 않는 것을 권장한다.

#10진수를 2진수로 변환
print(bin(0))		#0b0
print(bin(8))		#0b1000   
print(bin(32))		#0b100000  
print(bin(255))		#0b11111111

#2진수를 변수에 할당
a = 0b100
print(a)		#4

✔  bin()함수를 사용해서 10진수를 2진수로 변환할 수 있다.

#10진수를 8진수로 변환
print(oct(8))		#0o10
print(oct(10))		#0o12   
print(oct(64))		#0o100  

#8진수를 변수에 할당
a = 0o10
print(a)		#8

✔  oct()함수를 사용해서 10진수를 8진수로 변환할 수 있다.

#10진수를 16진수로 변환
print(hex(0))		#0x0
print(hex(255))		#0xff
print(hex(12345))	#0x3039 

#16진수를 변수에 할당
a = 0xff
print(a)		#255

✔  hex()함수를 사용해서 10진수를 16진수로 변환할 수 있다.

 

👉  실수형 (Floating Point, 부동 소수점)

f1, f2, f3, f4, f5 = 3.14, -38.33, 0.0, 4567.785, 23.1

✔  간단하게 말하면 소수점이 있는 숫자를 의미한다.

✔  파이썬에서는 실수를 부동 소수점 방식으로 표현한다. 이는 소수점을 움직여서 소수를 표현하는 방식이다.

print(0.1+.0.2) #0.30000000000000004
print(0.1 + 0.2 == 0.3)  #False

✔  파이썬에서 0.1과 0.2의 합을 출력하면 0.3이 아닌 값이 나온다.

✔  파이썬은 실수를 부동 소수점 방식으로 표현하는데, 부동 소수점은 실수 표현 시 오차가 발생한다.

✔  그렇기 때문에 0.1 + 0.2 == 0.3의 논리식은 False를 반환한다.

 

부동 소수점 구조

✔  파이썬에서 실수를 표현하는 방법에 대해 자세히 알아보자.

✔ 첫 번째 부호 비트는 실수가 양수인지 음수인지를 표현한다. 양수라면 0, 음수라면 1로 표현된다.

✔  그리고 지수부는 11비트로 최대 2^2023으로 큰 값을 표현할 수 있다. (❔ 왜 2^2023이지 ❔)

#3비트 사용		#4비트 사용
000 = 0			0000 = 0
001 = 1			...
010 = 2			1001 = 9
100 = 4			1010 = A(10)
101 = 5			...
111 = 7			1111 = F(15)
# 8,9 표현X		# B~F는 필요X

✔  0~9를 사용하는 10진법 숫자를 2진수로 표현하기 위해서는 3비트는 부족하고, 4비트는 남는다.

✔  즉, 10진법 숫자를 표현하기 위해 3-4비트가 필요하다는 것을 알 수 있다.

 

✔  가수부는 10진법을 표현해야 하므로 52//3=17, 52//4=13의 연산을 통해

✔  대략 13~17개, 약 15개의 정수를 표현할 수 있음을 알 수 있다. (변환 체계마다 다르지만 일반적으로 그렇다)

✔  그렇기 때문에 실수형을 지수 형태로 표현하지 않으면 메모리 한계에 부딪혀 오차가 발생한다.

✔  오차의 발생은 오류가 아니므로, 오차가 쌓이고 쌓여서 결국 엉뚱한 값으로 돌아온다.

x = 12340000000000000.0		#가수부의 범위를 벗어나 오차 발생
x = 0.1234 * 10^17		#지수형태로 저장하면 가수부 범위 내

✔  x를 있는 그대로 저장하면 실수의 가수부 표현 범위를 벗어나기 때문에 가수부에서 문제가 발생한다. (오차 발생)

✔  그렇기 때문에 지수 표현법을 사용해 오차를 줄여주도록 하자.


from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2'))	#0.3

✔  decimal 모듈의 Decimal 함수를 사용해 오차가 없는 고정 소수점으로 사용할 수 있다. (모듈 import 필수)

✔  고정 소수점을 사용하면 숫자를 10진수로 처리해 정확한 소수점 자릿수를 표현한다고 한다.

from fractions import Fraction
print(Fraction('10/3')) 	#10/3
print(Fraction(10, 3))		#10/3

✔  순환 소수라면(3.333333...) 고정 소수점을 표현하는 Decimal 함수도 정확하게 표현할 수 없다.

✔  이 경우는 fractions 모듈의 Fraction함수를 사용해 분수로 표현할 수 있다. (모듈 import 필수)

✔  인수를 하나 사용한다면 작은따옴표로 분수를 감싸 넣어주고, 두 개의 인수를 사용할 때에는 콤마로 구분한다.

 

👉  문자열 (String)

str1, str2, str3, str4, str5 = 'a', 'abc', '가나다', 'hello wolrd!', '010-1234-5678'

✔  하나 또는 여러 문자로 구성된다. 문자열은 단 따옴표나 큰따옴표로 감싼다.

✔  다른 형태의 데이터 타입이어도 따옴표로 감싸면 문자열로 인지한다.

✔  다른 프로그래밍 언어와 달리 char형은 존재하지 않으며, 항상 문자열 즉 문자의 배열 형태로 저장된다.

str1 = 'ab'
print(str1)	#ab
print(str1[0])	#a
print(str1[1])	#b

str2 = 'a'
print(str2)	#a
print(str2[0])	#a

✔  문자열은 항상 문자의 배열 형태이므로, 문자열 변수명은 곧 주소 값을 의미한다

✔  문자열 변수명에 첨자를 사용하면 문자 하나하나에 접근할 수 있다.

✔  문자를 하나 저장하더라도 문자열로 저장됨을 확인할 수 있다.

#배열명[start:end:step]
x = 'Hello Wolrd!'

print(x)	#Hello Wolrd!
print(x[0])	#H
print(x[0:3])	#Hel
print(x[5:])	# World!
print(x[-1])	#!
print(x[-3:])	#rd!
print(x[-4:-2]	#lr
print(x[0:5:2])	#Hlo

✔  파이썬에서 배열의 인덱스는 다양한 방법으로 사용할 수 있다.

✔  대괄호 내부에는 최대 3개의 값을 넣을 수 있다. 

✔  순서대로 index의 start 지점, end 지점 (기준은 미포함), step의 단위를 의미한다.

✔  step의 경우 생략되면 1로 증가 단위가 설정된다.

✔  마지막 출력문은 0~4번째 문자를 index를 2 증가하면서 출력한다. 즉 index 0,2,4에 해당하는 Hlo를 출력한다.

✔  end 값을 미포함하는 이유는 index는 0부터 시작하기 때문이다.

 

👉  불 (Boolean)

if 1 : print('true')		#true
if 2 : print('true')		#true
if not 0 : print('false')	#false 

✔  Boolean 은 True(1)와 False(0) 두 가지 값을 가진다

✔  True는 일반적으로 1로 표현되지만, 0이 아닌 모든 값을 True로 인지한다.

✔  마지막 if문의 조건은 not연산을 사용해서 false를 true로 바꾸어주어 출력문이 실행되도록 했다.

 

👉  형변환(Casting)

a = 1
b = '123'

i = int(b)		#'123'을 int로 형변환 → 123
f = float(a)		#1을 float로 형변환 → 1.0
s = str(a)		#1을 string으로 형변환 → '1'
b = bool(a)		#1을 booleand로 형변환 → True

print(i,f,s,b,sep='/')
print(type(i))
print(type(f))
print(type(s))
print(type(b))

✔  변경하고 싶은 데이터 형()을 통해 형 변환할 수 있다

str = '3.14'

#a = int(str)   #에러 발생
a = float(str)
a = int(a)
print(a)

✔  문자열 변수에 실수 형태의 문자열이 저장되어 있다면, 바로 정수형으로 형변환할 수 없다.

 

👉  변수명이 의미하는 것

✔  변수는 일반적으로 데이터를 담는 메모리 공간을 뜻한다.

✔  하지만 파이썬에서는 데이터를 변수에 저장하는 것이 아니라 데이터, 즉 객체의 주소를 변수에 저장한다.

✔  객체에 대한 주소 값을 변수가 가지고, 파이썬에서는 이를 레퍼런스로 취급한다.

 

✔  파이썬의 레퍼런스 : C/C++의 포인터, 레퍼런스 개념이 혼재되었다. 물리적으로는 포인터지만 레퍼런스로 사용한다.

✔  포인터로서의 특징 : 자체 저장 공간이 있어서 변경 가능 (대입 연산 가능)

✔  레퍼런스로서의 특징 : 이름 자체가 객체를 의미 ( 포인터 연산 불가능(예) *(p+1), *(p+2) )

test = {10,"test", 20}

 

✔  배열의 경우도 마찬가지로 데이터를 저장하는 것이 아니라 주소 값을 의미한다.

✔  배열의 요소가 주소 값을 의미하기 때문에 배열에 서로 다른 형태의 데이터를 저장할 수 있다.

✔  참고로 파이썬은 시스템 변수, file 등 모든 것들을 객체로 본다.

a = 10
a = 20

✔  a에 10을 할당했다가 20으로 재할당하면 a가 참조하는 주소 값이 바뀌었다고 볼 수 있다.

✔  10은 더 이상 사용하지 않는 데이터이므로 시간이 지나면 가비지 컬렉터에 의해 자동 소멸된다.

✔  사용자 입장에서는 필요 없는 데이터를 자동 정리해주니까 편리하지만, 이는 속도가 떨어지는 원인이 된다.

 

👉  산술 연산자

산술 연산자 설명
+ 더하기
- 빼기
* 곱하기
/ 나누기
% 나머지 연산 (정수만 가능)
// 소수점 이하 절삭 (몫)
** 거듭 제곱

✔  나누기 연산의 결과는 항상 실수

 

👉  할당 연산자

할당 연산자 예시 설명
= x = 2   x에 2를 저장
+= x += 2   x = x + 2 와 동일한 표현 
-= x -= 2   x = x - 2 와 동일한 표현 
*= x *= 2   x = x * 2 와 동일한 표현 
/= x /=2   x = x / 2 와 동일한 표현 
%= x %=2   x = x % 2 와 동일한 표현 
**= x **=2   x = x + 2 와 동일한 표현 

 

👉  연산자 우선순위

우선순위 연산자 의미
1     ( ) [ ] { }    괄호, 리스트, 딕셔너리, 세트 등
2     **    지수
3     + - ~    단항 연산자
4     *, /, %, //    산술 연산자
5     + -
6     << >>    비트 시프트 연산자
7     &    비트 논리곱
8     ^    비트 배타적 논리합
9     |    비트 논리합
10     >, >=, <, <=    관계 연산자
11     ==, !=    동등 연산자
12     =, %=, /=, //=, -=, +=, *=, **=    대입 연산자
13     not    논리 연산자
14     and
15     or
16     if ~ else    조건문

 

 

 

 

 

 

[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과

댓글
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday