방구석 호랑이 이불 밖은 위험해

04. Python의 자료형

Python의 자료형

변수는 상자라고 표현했었다. 상자에 담을 수 있는 물건은 상자의 크기에 따라 다르듯이, 변수에 담을 수 있는 데이터도 각자 다르다. 이렇게 데이터를 식별하는 분류를 자료형 또는 데이터 타입(data type)이라고 부른다.

이번 포스트에서는 자주 사용하는 자료형을 위주로 정리를 했다. Python의 자료형 구조는 아래와 같으며, Python 문서를 기준으로 아래와 같이 재정리했다.

불리언(Boolean)

True와 False의 값을 가지고 있는 자료형이다. 주로 조건식의 결괏값으로 사용되며, 값의 존재 여부도 불리언으로 나타낼 수 있다.

Code

# Python_Study_04_01.py
# type() 함수는 해당 자료형을 확인 할 수 있다.
print(type(True))
print(type(False))
print()

# bool() 함수는 다른 자료형을 불리언으로 바꿔준다.
print(bool('Hello'))
print(bool(''))
print(bool([0, 1, 2]))
print(bool([]))
print(bool(()))
print(bool({}))
print(bool(0))
print(bool(1))
print(bool(None))

Result

<class 'bool'>
<class 'bool'>

True
False
True
False
False
False
False
True
False

숫자 형에서 불리언으로 바꿀 때, 0이 아닌 값은 모두 True로 바뀐다. bool() 함수를 사용한 것처럼 다른 자료형으로 바꾸는 것을 형 변환이라고 말한다.

숫자형(Number)

숫자형은 숫자를 나타내기 위해 있는 자료형이다. Python에서 숫자를 나타낼 수 있는 방법은 정수, 실수, 복소수 형태로 나타낼 수 있다.

모든 숫자형(복소수는 부분적으로 해당)은 다음과 같은 연산들을 지원한다.

연산 결과
x + y x와 y의 합
x - y x와 y의 차
x * y x와 y의 곱
x / y x와 y의 몫
x // y x와 y의 정수로 내림한 몫
x % y x / y의 나머지
-x 음의 x
+x 양의 x
abs(x) x의 절대값 또는 크기
int(x) 정수로 변환된 x
float(x) 실수로 변환된 x
complex(re, im) 실수부 re와 허수부 im으로 구성된 복소수, im의 기본값은 0
c.conjugate() 복소수 c의 켤레
divmod(x, y) (x // y, x % y)를 반환
pow(x, y) x의 y 거듭제곱
x ** y x의 y 거듭제곱

정수(integral)

정수를 나타내는 자료형이다. Python3에서는 정수로 나타낼 수 있는 고정된 최대, 최소 범위가 없다. 그렇기 때문에 대부분의 수는 정수형으로 나타낸다.

Code

# Python_Study_04_02.py
print(type(1313))
print(type(-485))
print()

print(int(12345.67))
print(int(0.987654321))
print(int('1004'))

Result

<class 'int'>
<class 'int'>

12345
0
1004

실수형을 정수형으로 형 변환을 하면 소수점 아래의 값은 모두 버림이 된다. 또한 문자열로 표현된 숫자를 정수형으로 바꾸면 해당 숫자를 정수형으로 사용이 가능하다.

실수(float)

Python에서는 소수점이 들어간 숫자형이면 실수형으로 보면된다.

Code

# Python_Study_04_03.py
print(type(2323.2323))
print(type(-1313.1313))
print(type(10/3))
print(type(4.24e10))
print()

print(4.24e-3)
print(4.24e3)
print()

print(float(77))
print(float('342.32'))

Result

<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>

0.00424
4240.0

77.0
342.32

나누기했을 때 결괏값이 실수형이 된다면, 결괏값은 자동으로 실수형으로 바뀐다. 4번째 줄에 “e”를 사용해 표현한 실수 표현 식이 있는데, “컴퓨터식 지수 표현 방식”으로 “e” 뒤의 숫자는 지수를 의미한다. 따라서 4.24e-3은 4.24 * 0.0001이 되고 4.24e 3은 4.24 * 1000이 된다.

복소수(complex)

실수와 허수로 이루어진 수를 복소수라고 한다. 수학교과서에서 허수를 “i”라고 배웠지만 Python에서는 “j”를 이용해서 사용한다.

Code

# Python_Study_04_04.py
a = 13 + 4j
b = complex(43, -3)
print(a)
print(b)
print(type(a))
print(a.real) # 실수
print(a.imag) # 허수부
print(a.conjugate()) # 켤레 복소수

Result

(13+4j)
(43-3j)
<class 'complex'>
13.0
4.0
(13-4j)

2진법, 8진법 그리고 16진법

숫자를 표현하는 방식에는 다양한 방법이 있다. 대표적으로 우리가 사용하는 10진법이 있다. 10진법은 숫자 표현을 10개의 문자를 사용해서 표현하는 방식을 말한다. 같은 크기의 값이라도 2진법, 8진법 그리고 16진법에 따라 표현하는 방법이 달라진다.

Code

# Python_Study_04_05.py
num_10 = 47
num_2 = bin(num_10) # 2진법
num_8 = oct(num_10) # 8진법
num_16 = hex(num_10) # 16진

print(num_10)
print(num_2)
print(num_8)
print(num_16)
print()

print(0b11101) # 2진법 표현식
print(0o234)   # 8진법 표현식
print(0x234)   # 16진법 표현식

Result

47
0b101111
0o57
0x2f

29
156
564

시퀀스형(Sequence)

여러 데이터가 나열된 자료형을 시퀀스형이라고 한다. 데이터가 나열되어있기 때문에 index를 통해 데이터에 접근할 수 있다. 대표적으로 문자열, 리스트, 튜플, 범위가 있다.

공통적으로 시퀀스형은 다음과 같은 연산을 지원한다. s는 시퀀스형을 의미한다.

연산 결과
x in s s의 항목 중 하나가 x와 같으면 True, 그렇지 않으면 False
x not in s s의 항목 중 하나가 x와 같으면 False, 그렇지 않으면 True
s + t s와 t의 이어 붙이기
s * n 또는 n * s s를 그 자신에 n번 더 이어 붙이기
s[index] s의 index번째 항목, 순서는 0부터 시작
s[index : end] s의 index에서 end까지의 슬라이스
s[index : end : step] s의 index에서 end까지 step요소 마다 슬라이스
len(s) s의 길이
min(s) s에서 가장 작은 항목
max(s) s에서 가장 큰은 항목
s.index(x[, i[, j]]) (i번째 이후와 j번째 전에 등장하는) s의 첫번째 x의 index
s.count(x) s 등장하는 x 의 총수

데이터 수정에 여부에 따라서 가변 시퀀스불변 시퀀스로 나눌 수 있다. 가변 시퀀스에는 리스트가 있고 불변 시퀀스에는 문자열, 튜플과 범위가 있다.

가변 시퀀스는 다음과 같은 연산을 지원한다. s는 가변시퀀스 형을 의미한다.

연산 결과
s[i] = x s의 항목 i를 x로 변경
s[i : j] = t i에서 j까지의 슬라이스를 t로 변경
del s[i : j] s[i : j] = []와 같음
s[i : j : k] = t s[i : j : k]가 t로 변경
del s[i : j : k] 시퀀스에서 s[i:j:k]의 항목들을 제거
s.append(x) 시퀀스의 끝에 x를 추가
s.claer() s에서 모든 항목을 제거
s.copy() s의 얕은 복사복을 생성
s.extend(t) 또는 s += t t의 내용을 s로 확장
s *= n n의 내용이 n번 반복되도록 s를 갱신
s.insert(i, x) x를 s의 i index에 삽입
s.pop([i]) i에 있는 항목을 꺼냄과 동시에 제거
s.remove(x) s에 있는 x를 항목을 s에서 제거, 존재하지 않으면 ValueError를 일으킴
s.reverse() s의 항목의 순서를 뒤집음

리스트(list)

리스트는 가변 시퀀스이다. 즉, 데이터를 나열하고 수정하고 추가하는 것이 자유롭다. 리스트에 모든 자료형을 담을 수 있다.

>>> s = [13, '문자', ['리스', range(20)], ('튜플', 45), {'집합', 32}, {'딕셔너리': 34}]
print(s)
>>> s
[13, '문자', ['리스', range(0, 20)], ('튜플', 45), {32, '집합'}, {'딕셔너리': 34}]

선언

리스트는 여러가지 방법으로 만들 수 있다. 리스트는 공통과 가변 시퀀스 연산들을 모두 사용할 수 있다.

Code

# Python_Study_04_06.py
# 대괄호를 이용하여 빈 리스트를 표시하기
list1 = []

# 대괄호를 사용하여 쉼표로 항목 구분하기
list2 = [1, 2, 3, "a", "b", "c"]

# 리스트 컴프리헨션 사용하기
list3 = [x for x in range(10)]

# 형 생성자를 사용하기
list4 = list()

print(list1)
print(list2)
print(list3)
print(list4)

Result

[]
[1, 2, 3, 'a', 'b', 'c']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]

관련 함수

sort([[key], [reverse=False]])

리스트를 정렬하는 메소드이다.

Code

# Python_Study_04_07.py
list1 = [1, 3, 4, 5, 2, 6]
list2 = ["hello", "python", "world", "program", "is", "good"]
list3 = [1, 3, 6, 4, 2, 5]

# 기본 사용
list1.sort()
print(list1)

# 특정한 값 정렬
# 글자의 길이에 따른 정렬
list2.sort(key=lambda x:len(x))
print(list2)

# 내림차순 정렬
list3.sort(reverse=True)
print(list3)

Result

[1, 2, 3, 4, 5, 6]
['is', 'good', 'hello', 'world', 'python', 'program']
[6, 5, 4, 3, 2, 1]

keyreverse의 옵션을 가진다. key는 특정한 값을 반환하는 함수를 이용해서 특정한 조건을 만족하는 정렬을 하게 해준다. reverse의 기본값은 False이며 True으로 설정하면 정렬 순서를 뒤집는다.

문자열(string)

Python에서 문자를 담당하는 자료형이다. 기본적인 사용과 메소드를 다루도록 하겠다. 더 자세한 내용은 Python 문서를 참조하면 된다.

선언

Code

# Python_Study_04_08.py
str1 = 'Hi'
str2 = "python"
str3 = '''this'''
str4 = """is"""
str5 = "python" "3"
str6 = str(486)

print(str1)
print(str2)
print(str3)
print(str4)
print(str5)
print(str6)

Result

Hi
python
this
is
python3
486

str5를 두 문자열의 사이가 공백인 것을 볼 수가 있다. 문자열과 문자열의 사이는 공백으로 처리한다. str6은 다른 자료형을 str을 통해서 문자열로 형변환을 해준다.

자료형과 문자열 복합 출력

모두 문자열로 변환

문자열과 다른 자료형을 같이 출력하기 위해서 자료형을 문자열로 변환 후, ,+를 사용하여 결합시켜 출력한다.

Code

# Python_Study_04_09.py
str1 = "hello"
str2 = "world"
num1 = 1012
num2 = 5678
float1 = 0.486
list1 = ["영희", "순희", "성희"]

print(str1 + str2)
print("생일" + str(num1))
print(str(num1), str(num2))
print("안녕", str1 + " " + str(float1))
print("출석", str(list1))

Result

helloworld
생일1012
1012 5678
안녕 hello 0.486
출석 ['영희', '순희', '성희']

간단하게 사용하는 것은 문제가 없지만, 자료형이 많아지면 코드가 길어져서 가독성이 안 좋아진다.

서식문자 사용

C 언어에서 사용하는 것처럼 서식 문자를 이용해서 출력하는 방법이다. Python3부터는 잘 안 쓰는 방법이라 알고만 넘어가자.

Code

# Python_Study_04_10.py
print("오늘의 날씨 %d°C" % 10)
print("π는 %f이다." % 3.141592)
print("나는 오늘 %s를 먹었다." % "사과")
print("이 문제의 오답률은 %d%%이다." % 45)
print("%d반은 %s를 우승하였다." % (8, "줄다리"))

Result

오늘의 날씨 10°C
π는 3.141592이다.
나는 오늘 사과를 먹었다.
 문제의 오답률은 45%이다.
8반은 줄다리를 우승하였다.

사용하는 데이터를 따로 관리할 수 있고, 코드의 가독성이 좋아졌다. 하지만 사용하고자 하는 서식 문자를 외워야 한다는 단점이 있다.

format()

Python3에서부터 사용하는 방법으로, 서식 문자를 외우지 않고 서식 문자의 장점만 사용하는 방법이다.
Code

# Python_Study_04_11.py
print("오늘의 날씨 {}°C".format(10))
print("π는 {0}이다.".format(3.141592))
print("2의 제곱근은 {0:0.2f}이다.".format(1.414))
print("나는 오늘 {apple}를 먹었다.".format(apple="사과"))
print("10 x 20의 답은 {}이다.".format(50))
print("{0}반은 {1}를 우승하였다.".format(8, "줄다리"))

Result

오늘의 날씨 10°C
π는 3.141592이다.
2 제곱근은 1.41이다.
나는 오늘 사과를 먹었다.
10 x { 20 / ( 40 / 10) } 답은 50이다.
8반은 줄다리를 우승하였다.

서식 문자를 외우지 않고, 데이터를 따로 관리하여 문자열을 만들 수 있다. 하지만 데이터가 많아지면 각 자리에 들어가는 데이터를 알기 힘들어진다.

f 문자열 포매팅

Python3.6부터 사용할 수 있는 방법이다. 문자열 앞에 f를 붙쳐서 사용하면 된다.

# Python_Study_04_12.py
age = 19
name = "홍길동"
print(f'{name}의 나이는 {age}이다.')
print(f"{name}은 내년엔 {age + 1}살이다.")
print(f"π는 {3.141592}이다.")

Result

홍길동의 나이는 19이다.
홍길동은 내년엔 20살이다.
π는 3.141592이다.

Python에서 사용하기 가장 쉬운 방법인 것 같다. 원하는 위치에 데이터를 직접 사용하기 때문에 생성되는 문자열을 유추하기 쉽다.

관련 함수

find()

문자열에서 가장 앞에 있는 찾고 싶은 문자의 위치를 반환한다. 만약 없으면 -1을 반환한다.

>>> a = "Python is good for you"
>>> a.find("o")
4
>>> a.find("z")
-1

join()

문자열의 각각 사이에 원하는 문자열을 추가할 수 있다.

>>> a = "abcdef"
>>> ', '.join(a)
'a, b, c, d, e, f'

upper(), lower()

문자열을 모두 대문자 또는 소문자로 변경한다.

>>> a = "PYTHON is good for you"
>>> a.upper()
'PYTHON IS GOOD FOR YOU'
>>> a.lower()
'python is good for you'

replace(data1, data2)

원하는 문자열을 다른 문자열로 모두 변경한다.

>>> a = "Apple is yummy. Apple is fruit"
>>> a.replace('Apple', 'Banana')
'Banana is yummy. Banana is fruit'

split()

문자열을 지정된 문자가 나올때마다 나눠서 리스트로 만든다. 지정된 문자가 없을 경우 공백문자마다 나눠서 리스트로 만든다.

>>> a = "Apple is yummy. Apple is fruit"
>>> a.split()
['Apple', 'is', 'yummy.', 'Apple', 'is', 'fruit']
>>> b = 'a,b,c,d'
>>> b.split(',')
['a', 'b', 'c', 'd']

문자열 공백 지우기

문자열의 끝에있는 공백을 지우는 함수이다.

>>> text = "  hi  "
>>> text.lstrip()
'hi  '
>> text.rstrip()
'  hi'
>>> text.strip()
'hi'

튜플(tuple)

튜플은 불변 시퀀스이다. 리스트와 마찬가지로 모든 자료형을 담을 수 있다. 하지만 튜플을 한번 선언하면 변경할 수 없다.

>>> a = (1, 2, 3, 4)
>>> a[0] = 5
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

선언

Code

# Python_Study_04_13.py
# 괄호를 이용하여 빈 튜플을 표시하기
t1 = ()
print(t1)

# 튜플에 1개의 데이터만 넣기
t2 = (1)
t3 = (1,)
print(t2)
print(t3)

t4 = (1, 2, 3, 4)
t5 = (1, 2, (4, 5))
t6 = ('a', 3, ['h', 'i'])
print(t4)
print(t5)
print(t6)

Result

()
1
(1,)
(1, 2, 3, 4)
(1, 2, (4, 5))
('a', 3, ['h', 'i'])

범위(range)

범위는 숫자의 불변 시퀀스이다. for에서 특정 횟수만큼 반복하는 데 많이 사용된다.

선언

범위의 기본 사용법은 range(stop) 또는 range(start, stop[, step])이다. stop은 범위의 마지막을 의미하며 stop만 사용할 시 0부터 stop까지의 범위를 나타낸다. start는 범위의 시작을 의미한다. step은 범위에서 step의 크기 만큼 건너뛰어서 값을 반환한다. 범위는 이어 붙이기와 반복을 제외한 공통 시퀀스를 사용할 수 있다.

Code

# Python_Study_04_14.py
a = range(10)
b = range(10, 20)
c = range(0, -10)
d = range(4, 15, 2)
e = range(0, -10, -1)

print(a)
print(list(a))
print(list(b))
print(list(c))
print(list(d))
print(list(e))

Result

range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[]
[4, 6, 8, 10, 12, 14]
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

집합형(Set)

집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다. 특징으로는 순서가 없고 중복을 허락하지 않는다. 집합은 인덱싱, 슬라이싱 또는 기타 시퀀스와 유사한 동작을 지원하지 않는다.

공통적으로 집합형은 다음과 같은 연산을 지원한다. s는 집합을 의미한다.

연산 결과
len(s) s의 원소 수(s의 크기)
x in s s의 원소 중 하나가 x와 같으면 True, 그렇지 않으면 False
x not in s s의 원소 중 하나가 x와 같으면 False, 그렇지 않으면 True
s.intersection(other) 또는 s & other [& ….] s와 other의 교집합
s.union(other) 또는 s | other s와 other의 합집합
s1.difference(other) 또는 s1 - other s에서 other의 차집합
s <= other s의 모든 원소가 other 에 포함되는지 검사
s < other s가 other의 진부분집합인지 검사합니다. 즉, set <= other and set != other
s ^ other s에서 other의 차집합 과 other에서 s의 차집합의 합집합
s.copy() s의 얕은 복사본을 반환

집합(set)

집합은 가변이 가능하다. 하지만 index를 이용한 접근이 불가능 하다.

선언

집합은 set을 사용해 만들 수 있다.

Code

# Python_Study_04_15.py
list1 = [1, 2, 3, 4]
tuple1 = (1, 2, 3, 4)
str1 = "hello"

s1 = set(list1)
s2 = set(tuple1)
s3 = set(str1)

print(s1)
print(s2)
print(s3)

Result

{1, 2, 3, 4}
{1, 2, 3, 4}
{'l', 'e', 'o', 'h'}

관련 함수

update(other)

집합에 모든 other의 원소들을 더한다.

>>> s = set([1, 2, 3, 4])
>>> other = set([3, 4, 5, 6])
>>> s.update(other)
>>> s
{1, 2, 3, 4, 5, 6}

intersection_update(other)

집합과 other에 공통으로 포함된 원소들만 남긴다.

>>> s = set([1, 2, 3, 4])
>>> other = set([3, 4, 5, 6])
>>> s.intersection_update(other)
>>> s
{3, 4}

difference_update(other)

집합에서 other에 있는 원소들을 제거한다.

>>> s = set([1, 2, 3, 4])
>>> other = set([3, 4, 5, 6])
>>> s.difference_update(other)
>>> s
{1, 2}

symmetric_difference_update(other)

두 집합의 어느 한 곳에만 포함된 원소들만 남긴다.

>>> s = set([1, 2, 3, 4])
>>> other = set([3, 4, 5, 6])
>>> s.symmetric_difference_update(other)
>>> s
{1, 2, 5, 6}

add(data)

집합에 원소를 추가한다.

>>> s = set([1, 2, 3, 4])
>>> s.add(5)
>>> s
{1, 2, 3, 4, 5}

remove(data)

원하는 원소를 집합에서 제거한다. 원하는 원소가 집합에 포함되어 있지 않으면 KeyError를 일으킨다.

>>> s = set([1, 2, 3, 4])
>>> s.remove(2)
>>> s
{1, 3, 4}

discard(data)

원하는 원소가 집합에 포함되어있으면 제거합니다.

>>> s = set([1, 2, 3, 4])
>>> s.discard(2)
>>> s
{1, 3, 4}

pop()

집합으로부터 임의의 원소를 제거해 돌려준다. 집합이 비어있는 경우 KeyError 를 일으킨다.

>>> s = set([1, 2, 3, 4])
>>> s.pop()
1
>>> s
{2, 3, 4}

clear()

집합의 모든 원소를 제거한다.

>>> s = set([1, 2, 3, 4])
>>> s.clear()
>>> s
set()

불변 집합(Frozenset)

frozenset을 사용해 불변하는 집합을 만들 수 있다.

Code

# Python_Study_04_16.py
str1 = "hello"
fs = frozenset(str1)

print(fs)
fs.add('v')

Result

frozenset({'e', 'l', 'h', 'o'})
Traceback (most recent call last):
  File "/Example/source/Python_Study_04_16.py", line 7, in <module>
    fs.add('v')
AttributeError: 'frozenset' object has no attribute 'add'

Process finished with exit code 1

매핑형(Mapping)

매핑형은 키(key)와 값(value)을 하나씩 짝지어 저장하는 자료형이다. 키(key)는 저장된 데이터를 구분하기 위해서 사용되고, 값(value)은 키(key)와 연결되어 저장되는 데이터가 된다. 데이터는 키(key)를 이용해서 접근할 수 있다.

딕셔너리(dict)

Python에서는 딕셔너리라고 부르지만 이런 형식의 데이터를 JSON이라고 부른다. 특히 웹관련 데이터를 다룰때 자주 등장한다.

Code

# Python_Study_04_16.py
a = dict(one=1, two=2, three=3)
b = {'one': 1, 'two': 2, 'three': 3}
c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
d = dict([('two', 2), ('one', 1), ('three', 3)])
e = dict({'three': 3, 'one': 1, 'two': 2})

print(a)
print(a == b == c == d == e)

Result

{'one': 1, 'two': 2, 'three': 3}
True

다양한 딕셔너리 선언방식이 존재하지만 b의 방법을 가장 추천한다.

관련 함수

list(dict)

딕셔너리가 가지고 있는 키(key)의 리스트를 반환한다

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> list(d)
['one', 'two', 'three']

len(dict)

딕셔너리가 가지고 있는 항목의 개수를 반환한다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> len(d)
3

dict[key]

딕셔너리에서 해당 키(key)에 해당하는 값(value)을 반환한다. 키(key)값이 존재하지 않을 경우 KeyError를 일으킨다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> d['one']
1
>>> d['four']
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'four'

get(key[, default])

딕셔너리에서 해당 키(key)값을 반환한다. 키(key)값이 존재하지 않을 경우 default를 돌려줍니다. default가 주어지지 않으면 기본값 None이 사용됩니다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> d.get('four')

>>> d.get('four', 4)
4

keys()

딕셔너리의 키(key)를 반환한다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> d.keys()
dict_keys(['one', 'two', 'three'])

values()

딕셔너리의 값(value)을 반환한다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> d.values()
dict_values([1, 2, 3])

items()

딕셔너리의 키(key)-값(value) 쌍을 반환한다.

>>> d = {'one': 1, 'two': 2, 'three': 3}
>>> d.items()
dict_items([('one', 1), ('two', 2), ('three', 3)])

마무리

한번에 정리를 하려다 보니 양이 많아졌다. Python을 처음 공부를 시작했으면 주로 자료형의 특징을 외우도록하자. 자료형의 관련 함수는 다 외울 필요없이 필요할때 찾아서 쓰다보면 자연스럽게 익숙해질것이다. 모든 자료형이 중요하지만 정수, 리스트, 문자열, 딕셔너리는 사용하는 빈도가 크기 때문에 절대적으로 기억하자.