본문 바로가기
IT & 데이터 사이언스/Python

[Python] Python의 자료형(튜플, 딕셔너리, 집합, 변수)⑵

by 바른 호랑이 2024. 4. 19.
728x90
반응형

안녕하세요. 바른 호랑이입니다.

이번 게시글에서는 Python의 자료형에 대해 알아볼 예정입니다. 

 

- 자료형 이란?

ㆍ프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 지칭하며, 프로그램의 기본이자 핵심 단위임.

 

- 튜플(tuple) 자료형

ㆍ[]가 아닌 () 형태로 이루어져 있다는 점과 리스트와 달리 값의 생성, 삭제, 수정이 불가능하다는 점을 제외하면 리스트와 거의 유사한 자료형임. 

ㆍ리스트와 큰 차이가 없는 형태의 자료형이기에 비슷한 역할을 하지만 값에 변화를 줄 수 있느냐 없느냐라는 중요한 차이가 존재하기에 구분해서 사용하는 것이 유리함. 프로그램이 실행되는 동안 값이 항상 변하지 않기를 바란다면 튜플을 값이 변경되어야 한다면 리스트를 사용해야 하며, 일반적으로는 값이 변경되는 경우가 많기 때문에 튜플보다는 리스트를 사용함.

# 튜플 자료형의 예시
t1 = tuple()
t2 = (1)
t3 = (1, 2, 3)
t4 = 1, 2, 3 # ()를 생략해도 무방
t5 = ('a', 'b', ('ab', 'cd'))
print(t1, t2, t3, t4, t5, sep='\n')

실행결과

# 튜플 값 수정시 발생하는 오류
del t1[0]

실행결과

# 튜플의 인덱싱과 슬라이싱, 더하기와 곱하기
tuple_01 = (1, 2, 3)
print(tuple_01[0], tuple_01[:2], sep=' / ') 
print(tuple_01+tuple_01) # 더하기
print(tuple_01*3) # 곱하기

실행결과

 

- 딕셔너리 자료형(Dictionary)

ㆍ"이름" = "홍길동"과 같은 대응 관계를 나타내는 자료형을 대부분의 언어들은 가지고 있는데 이를 연관배열(Associative array) 또는 해시(Hash)라고도 함. python에서는 이와 같은 자료형을 딕셔너리라고 지칭하며, Key와 Value로 이루어져 한 쌍을 이룸. 딕셔너리는 리스트나 튜플과 같이 순차적으로(sequential) 요소들의 값을 구하지 않고 Key를 통해 Value를 얻으며, 이는 딕셔너리의 가장 큰 특징임. 

# 딕셔너리 자료형의 예시
dic_ex = {'name':'alex', 'phone':'0101234567', 'birth':'20001205'}
print(dic_ex)

실행결과

# 딕셔너리 Key, Value 추가하기
dict_01 = {1: 'a'}
dict_01[2] = 'b'
dict_01['name'] = 'John'
print(dict_01)

# 딕셔너리 Key, Value 삭제하기
del dict_01[1]
print(dict_01)

# Key값으로 Value 추출하기
print(dict_01[2], dict_01['name'], sep=' / ')

# 딕셔너리 작성시 주의사항 : 중복되는 Key 값 사용 금지
dict_02 = {1: 'a', 1: 'b'}
print(dict_02[1])

실행결과

# 딕셔너리 관련 함수들
dict_03 = {'name': 'John', 'phone': '0101234567', 'birth': 20040707}
print(dict_03.keys(), list(dict_03.keys()), sep='\n') # dict_keys라는 객체 작성 및 반환 - append, insert, remove, sort가 불가능하기에 형변환 필요
print(dict_03.values(), list(dict_03.values()), sep='\n') # dict_values라는 객체 작성 및 변환 - append, insert, remove, sort가 불가능하기에 형변환 필요
print(dict_03.items()) # Key, Value 쌍(튜플) 반환
dict_03.clear() # 딕셔너리 내부 전부 삭제
print(dict_03)
dict_03 = {'name': 'John', 'phone': '0101234567', 'birth': 20040707}
print(dict_03['phone'], dict_03.get('phone'), dict_03.get('ph'), sep=' / ') # Key로 Value 얻기 : get함수는 해당 key가  없을 시 에러가 아닌 None을 반환
print(dict_03.get('ph', 'default value')) # get함수는 값이 없을 경우 default값도 설정 가능
print('phone' in dict_03, 'ph' in dict_03, sep=' / ') # 딕셔너리에 특정값이 있는지 확인

실행결과

 

- 집합 자료형(Set)

ㆍpython 2.3부터 지원되기 시작한 자료형으로 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형

ㆍ중복을  허용하지 않으며, 순서가 정해져 있지 않아 인덱싱을 통해 값을 얻을 수 없음. 이로 인해 인덱싱을 위해서는 집합 자료형을 리스트나 튜플로 형변환 후 사용해야함.

# 집합 자료형 예시
set_01 = set([1, 2, 3])
set_02 = set('Hello')
print(set_01, set_02, sep=' / ')

실행결과

# 집합 자료형 활용
set_03 = set([1, 2, 3, 4, 5, 6])
set_04 = set([4, 5, 6, 7, 8, 9])
print(set_03&set_04, set_03.intersection(set_04), sep=' / ') # 교집합
print(set_03|set_04, set_03.union(set_04), sep=' / ') # 합집합
print(set_03-set_04, set_03.difference(set_04), sep=' / ') # 차집합

실행결과

# 집합 자료형 관련 함수들
set_05 = set([1, 2, 3])
set_05.add(1000) # 단일 값 추가
print(set_05)
set_05.update([4, 5, 6]) # 복수개의 값 추가
print(set_05)
set_05.remove(1000) # 값 제거
print(set_05)

실행결과

 

- 자료형의 참과 거짓

ㆍ자료형에는 참과 거짓을 판별하는 기준이 있으며 이는 if문이나 while문과 같이 반복 및 제어문에서 값의 참, 거짓 유무를 판단하는 근거로 활용됨.

자료형 참 or 거짓
문자열 "python" True
"" False
리스트 [1, 2, 3] True
[] False
튜플 () False
딕셔너리 {} False
숫자형 0이 아닌 숫자 True
0 False
  None False
# 참 or 거짓이 활용되는 예시 
test_01 = [1, 2, 3]
while test_01:
  print(test_01.pop())
  if not(test_01):
    print('There is no value')

실행결과

 

- 변수(Value)

ㆍ자료형의 값을 저장하는 공간으로 객체를 가리키는 것이라 할 수 있으며, 객체가 저장된 메모리의 위치를 가리키는 레퍼런스라고도 할 수 있음.

ㆍpython에서 모든 자료형은 객체이기에 3이라는 값은 상수값이 아닌 하나의 '정수형 객체'이며, 이와 같은 특성 덕분에 내장함수를 바로 사용할 수 있음. 

# 변수 선언 및 다수의 변수를 선언시 같은 값을 바라보는지 확인
import sys
print(sys.getrefcount('123456789abcdefg')) # sys의 getrefcount는 입력한 자료형에 대한 참조개수를 알려주는 함수
a = '123456789abcdefg'
print(sys.getrefcount('123456789abcdefg'))
b = '123456789abcdefg'
print(sys.getrefcount('123456789abcdefg'))
c = '123456789abcdefg'
print(sys.getrefcount('123456789abcdefg'))

실행결과

print(a is b) # 같은 값을 참조하기 때문에 True를 반환

실행결과

# 변수 작성 방법
a, b = (1, 2) # 튜플로 여러개의 변수 선언
c, d = [3, 4] # 리스트로 여러개의 변수 선언
print(a, b, c, d, sep=' / ')
s1 = s2 = 'python' # 여러개의 변수를 같은 값으로 선언
print(s1, s2, sep=' / ')
a, b = b, a # a, b 값 변경하기
print(a, b, sep=' / ')

실행결과

# 메모리에서 생성된 변수 삭제
# 레퍼런스 카운트가 0이 되면 해당 객체는 자동으로 메모리에서 사라지며, 이를 Garbage collection이라고 함.
import sys
print(sys.getrefcount('123456789123456789'))
a = '123456789123456789'
print(sys.getrefcount('123456789123456789'))
del(a)
print(sys.getrefcount('123456789123456789'))

실행결과

# 리스트의 현재 상태를 복사하려고 할 경우 유의사항
a = [1, 2, 3]
b = a
print(a, b, sep=' / ')
a.append(4)
print(a, b, sep=' / ') # a와 b가 같은 객체를 참조하기 때문에 a 변수로 append를 해도 b를 호출 시 값이 변경된 리스트를 받게됨.
b = a[:] # a의 현재상태 복사
a.append(5)
print(a, b, sep=' / ') # a와 b는 다른 객체를 바라보고 있는 상황
b = a.copy() # copy함수를 이용한 방법
a.append(6)
print(a, b, sep=' / ')
print(a is b) # a와 b가 같은 객체를 바라보고 있는지 확인하는 함수

실행결과

 

728x90
반응형

댓글