자료형(Data Types)

pengpengIT·2024년 1월 28일

파이썬

목록 보기
4/6

데이터 타입은 컴퓨터가 처리하는 데이터의 종류를 나타낸다.
컴퓨터는 데이터를 메모리에 저장하고 주어진 프로그램에 따라 처리한다.
데이터는 특정 객체에 대한 사실을 나타낸다.

일부 데이터의 예시는 다음과 같다.

학생 데이터 - 이름, 성별, 학급, 성적, 나이, 등록금 등.
도서관의 책 데이터 - 제목, 저자, 출판사, 가격, 페이지 수, 출판 연도 등.
사무실 직원 데이터 - 이름, 직책, 급여, 부서, 지점 등.

데이터 타입은 어떤 종류의 값이며 해당 값에 어떤 작업을 수행할 수 있는지 결정한다.
숫자, 비숫자 및 부울 (참/거짓) 데이터는 가장 명백한 데이터 유형이다.
그러나 각 프로그래밍 언어는 그 자체의 분류를 갖추고 있으며 주로 해당 프로그래밍 철학을 반영한다.

목차
1. 파이썬 자료형
2. 숫자 자료형
3. 시퀀스 자료형
4. 문자열(String)
5. 리스트(List)
6. 튜플(Tuple)
7. range() 함수
8. 딕셔너리(Dictionary)
9. 세트(Set)
10. 불리언(boolean)

1. 파이썬 자료형

파이썬 데이터 타입은 변수의 유형을 정의하는 데 사용된다.
이는 변수에 어떤 유형의 데이터를 저장할 것인지를 정의한다.
메모리에 저장된 데이터는 여러 유형일 수 있다.
예를 들어, 사람의 나이는 숫자 값으로 저장되고 주소는 알파벳 문자로 저장된다.

  • Text Type(String): str
  • Numeric Types: int, float, complex
  • Sequence Types: list, tuple, range
  • Mapping Type: dict
  • Set Types: set, frozenset
  • Boolean Type: bool
  • Binary Types: bytes, bytearray, memoryview
  • None Type: NoneType

파이썬에서는 변수에 값을 할당할 때 데이터 타입이 설정된다.

# 데이터 타입 예시

a = "Hello World"								#str	
b = 20											#int
c = 20.5										#float
d = 1j											#complex
e = ["apple", "banana", "cherry"]				#list
f = ("apple", "banana", "cherry")				#tuple
g = range(6)									#range
h = {"name" : "John", "age" : 36}				#dict
i = {"apple", "banana", "cherry"}				#set
j = frozenset({"apple", "banana", "cherry"})	#frozenset
k = True										#bool
l = b"Hello"									#bytes
m = bytearray(5)								#bytearray
n = memoryview(bytes(5))						#memoryview
o = None										#NoneType

데이터 타입을 지정하려면 생성자 함수를 사용할 수 있다.

# 생성자 함수(데이터 타입 지정) 예시

a = str("Hello World")							#str
b = int(20)										#int
c = float(20.5)									#float
d = complex(1j)									#complex
e = list(("apple", "banana", "cherry"))			#list
f = tuple(("apple", "banana", "cherry"))		#tuple
g = range(6)									#range
h = dict(name="John", age=36)					#dict
i = set(("apple", "banana", "cherry"))			#set
j = frozenset(("apple", "banana", "cherry"))	#frozenset
k = bool(5)										#bool
l = bytes(5)									#bytes
m = bytearray(5)								#bytearray
n = memoryview(bytes(5))						#memoryview

2. 숫자 자료형

파이썬 숫자 데이터 타입은 숫자 값을 저장한다.
숫자 객체는 값이 할당될 때 생성된다.
예를 들면 다음과 같다.

# 숫자 데이터 타입 예시

var1 = 1       # int data type
var2 = True    # bool data type
var3 = 10.023  # float data type
var4 = 10+3j   # complex data type

파이썬은 네 가지 다른 숫자 유형을 지원하며 각각은 int, bool, float 및 complex라는 내장 클래스를 가지고 있다.

  • int (부호 있는 정수)
  • bool (정수의 하위 유형)
  • float (부동 소수점 실수)
  • complex (복소수)

파이썬의 표준 라이브러리에는 주어진 객체의 클래스를 반환하는 내장 함수인 type()이 있다.
여기에서는 정수와 부동 소수점 숫자의 유형을 확인하는 데 사용된다.

>>> type(123)
<class 'int'>
>>> type(9.99)
<class 'float'>

복소수는 두 부분으로 이루어져 있다.
실수 부분과 허수 부분으로 나뉘며 이들은 '+' 또는 '-' 기호로 구분된다.
허수 부분은 'j'로 표시되며 이는 허수를 나타낸다.
-1의 제곱근 (√-1)은 허수로 정의된다.
파이썬에서 복소수는 x + yj로 표현되며 여기서 x는 실수 부분이고 y는 허수 부분이다.
따라서 5 + 6j는 복소수다.

>>> type(5+6j)
<class 'complex'>

부울(불리언) 데이터 타입은 True와 False라는 키워드로 표현되며, 두 가지 가능한 값만 가진다.
이 값들은 각각 정수 1과 0에 해당한다.

>>> type (True)
<class 'bool'>
>>> type(False)
<class 'bool'>

다음은 정수, 부동 소수점 및 복소수의 사용 예시다.

# 정수, 부동 소수점, 복소수 예시

# integer variable.
a=100
print("The type of variable having value", a, " is ", type(a))

# boolean variable.
b=True
print("The type of variable having value", b, " is ", type(b))

# float variable.
c=20.345
print("The type of variable having value", c, " is ", type(c))

# complex variable.
d=10+3j
print("The type of variable having value", d, " is ", type(d))

3. 시퀀스 자료형

시퀀스는 컬렉션 데이터 타입으로, 순서가 있는 항목의 모음이다.
시퀀스의 항목은 0부터 시작하는 위치 색인을 가지고 있다.
이는 C나 C++의 배열과 개념적으로 유사하다.

파이썬에서는 다음과 같은 세 가지 시퀀스 데이터 타입이 정의되어 있다.

  • 문자열 데이터 타입 (String Data Type)
  • 리스트 데이터 타입 (List Data Type)
  • 튜플 데이터 타입 (Tuple Data Type)

파이썬의 시퀀스는 경계가 정해져 있으며 순회 가능하다.
파이썬에서 이야기할 때 순회 가능(iterable)하다고 하면 시퀀스 데이터 타입(예: 리스트)을 의미한다.

4. 문자열(String)

파이썬 문자열은 하나 이상의 유니코드 문자로 이루어진 시퀀스로, 작은따옴표, 큰따옴표 또는 삼중 따옴표로 둘러싸여 있다.
파이썬 문자열은 변경할 수 없으며, 즉 문자열에 대한 작업을 수행할 때 항상 동일한 유형의 새로운 문자열 객체를 생성하게 되며 기존 문자열을 변경하지 않는다.

동일한 문자 시퀀스가 둘러싸여 있다면 작은따옴표, 큰따옴표 또는 삼중 따옴표의 형태는 중요하지 않는다.
따라서 다음 문자열 표현은 동등하다.

>>> 'pengpengIT'
'pengpengIT'
>>> "pengpengIT"
'pengpengIT'
>>> '''pengpengIT'''
'pengpengIT'

파이썬에서의 문자열은 str 클래스의 객체다.
이를 확인하기 위해 type() 함수를 사용할 수 있다.

>>> type("Welcome To TutorialsPoint")
<class 'str'>

문자열은 숫자가 아닌 데이터 유형이다.
이에 대해서는 산술 연산을 수행할 수 없지만, 슬라이싱 및 연결과 같은 작업을 수행할 수 있다.
파이썬의 str 클래스는 문자열 처리에 유용한 여러 메서드를 정의하고 있다.
문자열의 부분집합은 문자열의 처음부터 시작하는 0에서 시작하는 색인과 끝에서 -1로 역순으로 작동하는 슬라이스 연산자([ ][:])를 사용하여 가져올 수 있다.

덧셈(+) 기호는 문자열 연결 연산자이며, 별표(*)는 파이썬에서의 반복 연산자다.
예를 들면 다음과 같다.

# 문자열 슬라이스 연산자, 연결 연산자, 반복 연산자 예시

str = 'Hello World!'

print (str)          # Prints complete string
print (str[0])       # Prints first character of the string
print (str[2:5])     # Prints characters starting from 3rd to 5th
print (str[2:])      # Prints string starting from 3rd character
print (str * 2)      # Prints string two times
print (str + "TEST") # Prints concatenated string

이는 다음과 같은 결과를 생성한다.

# 문자열 슬라이스 연산자, 연결 연산자, 반복 연산자 예시 결과

Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

5. 리스트(List)

파이썬 리스트는 가장 다양한 복합 데이터 유형이다.
쉼표로 구분된 항목으로 이루어져 있으며 대괄호([])로 둘러싸여 있다.
어느 정도까지는 파이썬 리스트가 C의 배열과 유사하다.
그들 사이의 한 가지 차이점은 파이썬 리스트에 속하는 모든 항목은 서로 다른 데이터 유형이 될 수 있지만, C 배열은 특정 데이터 유형에 관련된 요소를 저장할 수 있다.

>>> [2023, "Python", 3.11, 5+6j, 1.23E-4]

파이썬에서의 리스트는 list 클래스의 객체다.
이를 확인하기 위해 type() 함수를 사용할 수 있다.

>>> type([2023, "Python", 3.11, 5+6j, 1.23E-4])
<class 'list'>

언급한 대로 리스트의 항목은 어떤 데이터 유형이든 될 수 있다.
이는 리스트 객체가 다른 리스트의 항목이 될 수도 있다는 것을 의미한다.
이 경우에는 중첩된 리스트가 된다.

>>> [['One', 'Two', 'Three'], [1,2,3], [1.0, 2.0, 3.0]]

리스트는 간단한 숫자, 문자열, 튜플, 딕셔너리, 세트 또는 사용자가 정의한 클래스의 객체와 같은 항목을 포함할 수 있다.

파이썬 리스트에 저장된 값은 색인이 0에서 시작하여 리스트의 처음부터 시작하여 끝까지 -1로 역순으로 작동하는 슬라이스 연산자([ ][:])를 사용하여 액세스할 수 있다.
덧셈(+) 기호는 리스트 연결 연산자이고, 별표(*)는 반복 연산자다.
예를 들면 다음과 같다.

# 리스트 슬라이스 연산자, 연결 연산자, 반복 연산자 예시

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print (list)            # Prints complete list
print (list[0])         # Prints first element of the list
print (list[1:3])       # Prints elements starting from 2nd till 3rd 
print (list[2:])        # Prints elements starting from 3rd element
print (tinylist * 2)    # Prints list two times
print (list + tinylist) # Prints concatenated lists

이는 다음과 같은 결과를 생성한다.

# 리스트 슬라이스 연산자, 연결 연산자, 반복 연산자 예시 결과

['abcd', 786, 2.23, 'john', 70.2]
abcd
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

6. 튜플(Tuple)

파이썬 튜플은 리스트와 유사한 또 다른 시퀀스 데이터 유형으로 쉼표로 구분된 여러 값으로 구성된다.
그러나 리스트와 달리 튜플은 괄호(...)로 둘러싸여 있다.

튜플 또한 시퀀스이므로 튜플의 각 항목은 컬렉션 내의 위치를 나타내는 인덱스를 가지고 있다.
인덱스는 0부터 시작한다.

>>> (2023, "Python", 3.11, 5+6j, 1.23E-4)

파이썬에서 튜플은 tuple 클래스의 객체다. 이를 type() 함수로 확인할 수 있다.

>>> type((2023, "Python", 3.11, 5+6j, 1.23E-4))
<class 'tuple'>

리스트와 마찬가지로 튜플의 항목은 리스트, 튜플 자체 또는 다른 파이썬 클래스의 객체가 될 수 있다.

>>> (['One', 'Two', 'Three'], 1,2.0,3, (1.0, 2.0, 3.0))

튜플을 형성하려면 괄호의 사용은 선택 사항이다.
괄호로 묶지 않은 쉼표로 구분된 데이터 항목은 기본적으로 튜플로 처리된다.

>>> 2023, "Python", 3.11, 5+6j, 1.23E-4
(2023, 'Python', 3.11, (5+6j), 0.000123)

리스트와 튜플 간의 주요 차이점은 다음과 같다.
리스트는 대괄호([ ])로 묶이며 원소 및 크기를 변경할 수 있다. 즉, 가변(mutable)이다.
튜플은 소괄호(( ))로 묶이며 업데이트할 수 없다. 즉, 불변(immutable)이다.
튜플은 읽기 전용 리스트로 생각할 수 있다.

# 튜플 예시

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print (tuple)               # Prints the complete tuple
print (tuple[0])            # Prints first element of the tuple
print (tuple[1:3])          # Prints elements of the tuple starting from 2nd till 3rd 
print (tuple[2:])           # Prints elements of the tuple starting from 3rd element
print (tinytuple * 2)       # Prints the contents of the tuple twice
print (tuple + tinytuple)   # Prints concatenated tuples

이는 다음과 같은 결과를 생성한다.

('abcd', 786, 2.23, 'john', 70.2)
abcd
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

튜플을 업데이트하려고 시도하면 튜플은 불변(immutable)이기 때문에 다음과 같이 코드가 유효하지 않다. (리스트의 경우 가능하다.)

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

7. range() 함수

Python range() 함수는 0에서 시작하여 지정된 숫자에 도달할 때까지 1씩 증가하는 숫자 시퀀스를 반환하는 내장 함수다.

range() 함수는 forwhile 루프와 함께 사용하여 숫자 시퀀스를 생성하는 데 사용된다.
함수의 구문은 다음과 같다.

range(start, stop, step)

여기에 사용된 매개변수는 아래와 같다.

  • start 시작 위치를 지정하는 정수(선택 사항, 기본값: 0)
  • stop 시작 위치를 지정하는 정수(필수)
  • step 증가를 지정하는 정수(선택 사항, 기본값: 1)

아래는 0부터 4까지의 숫자를 출력하는 for 루프를 사용하는 프로그램이다.

# range() 함수 예시

for i in range(5):
  print(i)

이는 다음과 같은 결과를 생성한다.

# range() 함수 예시 결과

0
1
2
3
4

이제 위의 프로그램을 수정하여 0이 아닌 1부터 시작하는 숫자를 아래와 같이 출력하면, 다음과 같은 결과를 생성한다.

# range() 함수 예시2

for i in range(1, 5):
  print(i)
# range() 함수 예시2 결과

1
2
3
4

다시 한 번 프로그램을 수정하여 1에서 시작하지만 1이 아닌 2씩 증가하는 숫자를 출력하면, 다음과 같은 결과를 생성한다.

# range() 함수 예시3

for i in range(1, 5, 2):
  print(i)
# range() 함수 예시3 결과

1
3

8. 딕셔너리(Dictionary)

Python 딕셔너리는 해시 테이블 유형이다.
딕셔너리 키는 거의 모든 Python 유형이 될 수 있지만 일반적으로 숫자 또는 문자열이다.
반면 값은 임의의 Python 객체가 될 수 있다.

Python 딕셔너리는 Perl에서 찾을 수 있는 연관 배열이나 해시와 유사하며 키:값 쌍으로 구성된다.
쌍은 쉼표로 구분되며 중괄호 {} 안에 넣는다.
키와 값 사이에 매핑을 설정하려면 세미콜론 : 기호가 사용된다.

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

파이썬에서 딕셔너리는 내장된 dict 클래스의 객체다.
이를 type() 함수를 사용하여 확인할 수 있다.

>>> type({1:'one', 2:'two', 3:'three'})
<class 'dict'>

딕셔너리는 중괄호({})로 둘러싸여 있으며 값은 대괄호([])를 사용하여 할당하고 액세스할 수 있다.

# 딕셔너리 예시

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print (dict['one'])       # Prints value for 'one' key
print (dict[2])           # Prints value for 2 key
print (tinydict)          # Prints complete dictionary
print (tinydict.keys())   # Prints all the keys
print (tinydict.values()) # Prints all the values
# 딕셔너리 예시 결과

This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']

파이썬의 딕셔너리는 순서가 없다.
문자열, 리스트 또는 튜플과 같이 각 항목(키:값 쌍)이 위치 색인에 의해 식별되지 않는다.
따라서 딕셔너리에는 슬라이싱 작업을 수행할 수 없다.
딕셔너리는 가변 객체이므로 dict 클래스에서 정의된 해당 기능을 사용하여 추가, 수정 또는 삭제 작업을 수행할 수 있다.

9. 세트(Set)

Python Set 데이터 유형은 수학에서 정의된 세트의 파이썬 구현이다.
파이썬의 세트는 컬렉션이지만 문자열, 리스트 또는 튜플처럼 인덱스 또는 순서가 지정되지 않은 컬렉션은 아니다.
세트 내에서 객체는 한 번 이상 나타날 수 없으며 List 및 Tuple에서는 동일한 객체가 한 번 이상 나타날 수 있다.

세트 내에서 쉼표로 구분된 항목은 중괄호 {} 안에 넣거나 중괄호로 표시된다.
세트 컬렉션 내의 항목은 다양한 데이터 유형일 수 있다.

>>> {2023, "Python", 3.11, 5+6j, 1.23E-4}
{(5+6j), 3.11, 0.000123, 'Python', 2023}

세트 컬렉션 내의 항목은 입력된 순서와 일치하지 않을 수 있다.
항목의 위치는 파이썬에서 수학적으로 정의된 세트 작업을 수행하기 위해 최적화된다.

파이썬의 세트(Set)는 내장 set 클래스의 객체이며, type() 함수로 확인할 수 있다.

>>> type({2023, "Python", 3.11, 5+6j, 1.23E-4})
<class 'set'>

세트는 숫자(int, float, complex 또는 bool), 문자열 또는 튜플과 같은 변경 불가능한 객체만 저장할 수 있다.
리스트나 딕셔너리를 세트 컬렉션에 넣으려고 하면 Python에서 TypeError가 발생한다.

>>> {['One', 'Two', 'Three'], 1,2,3, (1.0, 2.0, 3.0)}
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

해싱은 컴퓨터 과학의 메커니즘으로 컴퓨터 메모리에서 객체를 빠르게 검색할 수 있게 한다.
해시 가능한 것은 변경 불가능한 객체뿐이다.

세트가 가변 항목을 허용하지 않더라도 세트 자체는 가변적이다.
따라서 내장된 set 클래스의 메서드를 사용하여 세트 객체에 대한 추가/삭제/업데이트 작업이 허용된다.
Python에는 세트 조작을 수행하는 데 사용되는 메서드와 연산자 집합이 있다.

10. 불리언(boolean)

Python의 불리언(boolean) 타입은 True 또는 False 중 하나를 나타내는 내장 데이터 타입 중 하나다.
bool() 함수는 모든 표현식의 값을 평가하고 해당 표현식에 기반하여 True 또는 False 중 하나를 반환한다.

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

다음은 boolean 변수 a와 b의 값을 출력하는 프로그램이다.

# boolean 예시

a = True
# display the value of a
print(a)

# display the data type of a
print(type(a))
# boolean 예시 결과

true
<class 'bool'>

다음은 다른 프로그램으로, 표현식을 평가하고 반환 값을 출력한다.

# boolean 예시2

# Returns false as a is not equal to b
a = 2
b = 4
print(bool(a==b))

# Following also prints the same
print(a==b)

# Returns False as a is None
a = None
print(bool(a))

# Returns false as a is an empty sequence
a = ()
print(bool(a))

# Returns false as a is 0
a = 0.0
print(bool(a))

# Returns false as a is 10
a = 10
print(bool(a))
# boolean 예시2 결과

False
False
False
False
False
True

참조 1. tutorialspoint, 「Python - Data Types」, tutorialspoint 사이트
참조 2. w3schools, 「Python Data Types」, w3schools 사이트

profile
펭귄을 좋아하고 언어를 공부하는 기획자

0개의 댓글