본문 바로가기
Programming Language/Python

파이썬 - (자료형 中 집합 ~ 변수)

by Notorious Coder 2023. 7. 6.

집합 자료형은 우리가 중학교, 고등학교 때 배웠던 그런 집합들을 생각하면 될 것 같다. 집합 자료형은 set 키워드를 사용해서 s1 = set([1, 2, 3]) 과 같이 만들 수 있다. 괄호 안에는 리스트나 문자열도 입력 가능하다. 여기서 집합의 특징을 알아보기 위해 코드 하나를 제시하겠다. 

 

 

 

 

 

'l' 하나가 빠져 있고 순서도 뒤죽박죽인 것처럼 보여진다. 바로 집합 자료형은 중복을 허용하지 않고 순서가 없기 때문이다.

그래서 집합 자료형은 인덱싱을 통해 요솟값을 얻을 수가 없다. 그렇기 때문에 인덱싱처럼 접근하려면 리스트나 튜플로 변환 후에 해야 한다. 그리고 이러한 특징들 때문에 나중에 프로그램을 만들다가 중복되는 요소들을 제거하고 싶을 때 집합 자료형을 사용한다. 

 

 

 

 

 

다음은 굉장히 복잡하게 구현해야 하는 다른 프로그래밍 언어들과 달리 파이썬은 집합 자료형을 가지고 교집합, 차집합, 합집합을 쉽게 구현할 수 있다는 점에서 굉장히 혁신적이다. 교집합은 (&) 혹은 intersection() 함수를 사용하면 되고, 합집합은 Shift + enter키 바로 위에 있는 키 (|) 혹은 union() 함수를 사용하고, 차집합은 (-) 빼기를 사용하거나 difference() 함수로 쉽게 표현이 가능하다.  

 

 

 

 

 

이제 집합 자료형과 관련된 다른 함수들을 간단히 보고 불(bool) 자료형으로 넘어가도록 하겠다. 

 

 

함수 기능
.add() 값 1개만 추가하기
.update() 여러 개의 값을 추가하기
.remove() 특정 값을 제거하기

 

 

 

이제 불(bool) 자료형이다. 생소하긴 하지만 어렵게 생각할 필요가 없다. 그냥 참과 거짓, True / False. 2가지 진리 판단값만을 가질 수 있는 자료형이다. 나중에 if 제어문같은 것들을 공부할 때 많이 사용된다. a = True, b = False 처럼 따옴표로 감싸지 않고 사용 가능하다. 실제로 type(a), type(b) 함수를 사용해서 확인해보면 자료형이 'bool' 자료형인 것을 확인할 수 있다. 그러면 True / False 이외에 어떻게 참과 거짓으로 구분할 수 있는가에 대해 표로 간단히 정리해보았다. 이해가 잘 되지 않아도 한 번 보고 넘어가면 될 것 같다. 나중에는 익숙해질 것이다. 

 

 

표현 참 or 거짓?
"python"
" (공백) " 거짓
[1, 2, 3]
[ (공백) ] 거짓
(1, 2, 3)
( (공백) ) 거짓
{ 'a' : 1 }
{ (공백) } 거짓
1
0 거짓

 

 

 

마지막으로 변수에 대한 이야기를 끝으로 자료형에 대한 공부를 마무리해보려 한다. 우리가 처음 변수를 배울 때 가령, a = 1 이라는 구문이 있으면 'a'라는 이름의 변수 박스 하나 안에 '1'이라는 값을 집어 넣는다고 배운 것을 기억할 것이다. 여기서 잠깐, 우린 "메모리" 라는 컴퓨터 부품을 한 번쯤은 들어봤을 것이다. 바로 저장 공간인데, 컴퓨터가 어떤 값을 실제로 처리할 때 실제 값을 메모리에 올리고 메모리에서 연산을 한다. 근데 그 메모리에는 "주소" 라는 것이 있다. 사실 변수는 이 '주소'를 가지고 있고 실제 값은 메모리에 있는 것이다. 다르게 말하면, 파이썬에서 사용되는 변수는 "객체"를 가리키는 것이라고도 한다. 가령, a = 3 이라고 선언을 하면 3이라는 값을 가지는 정수 자료형(객체)이 메모리에 생성되고 변수 a는 객체가 저장된 메모리의 위치를 가리키는 레퍼런스(Reference)이며, a라는 변수는 3이라는 정수형 객체를 가리키고 있다고 한다. 여기서 "객체" 라는 것은 자료형이라고 보면 되고, 객체가 있으면 메소드를 이용해서 함수를 적용할 수 있다. 

 

여기서 간단한 예시를 살펴보겠다. a = [1, 2, 3, 4] 라는 리스트가 있을 때, b = a 를 한 후 a[1] = 5 라고 a리스트의 두 번째 값을 5라고 바꾸었을 때 b는 무엇일까? a가 a = [1, 2, 3, 4] 였을 때의 주소값을 b에 대입한 것이니 b는 그대로 b = [1, 2, 3, 4] 일까? 결과는 b도 b = [1, 5, 3, 4] 이다. 쉽게 비유해서 설명하자면, a 아파트가 있다고 해보자. a 아파트는 당연히 OO시 OO구 처럼 주소가 있을 것이다. 근데 b한테 a 아파트의 주소를 알려주고 놀러오라고 했다. 그 때 만약 a아파트의 방 안에 가구가 바뀌면 b가 찾아갔을 때도 바뀌어 있는 상태이지 않을까? 만약 b한테는 바뀌기 전 원래 상태로 보인다면.... 멀티버스인가? 좀 섬뜩할 수도 있겠다. 지금 굳이 이해가 가지 않아도 프로그래밍을 계속해서 공부하다 보면 자연스럽게 깨닫게 될 것이니 그냥 이렇게 되는구나 정도만 느껴보고 이제 제어문에 대해 공부해보자.

 

 

 

 

파이썬 프로그래밍에 관한 글은 "이지스퍼블리싱"의 "Do it!, 점프 투 파이썬"이라는 책을 학습하고 정리한 것입니다.