본문 바로가기
PYTHON

파이썬의 자료형(4) - 집합, 불, 변수

by 휘성티비 2024. 8. 21.

집합

먼저 집합 자료형은 set 키워드로 만들 수 있다.

>>> s1 = set([1, 2, 3])
>>> s1
{1, 2, 3}

set 안에 리스트를 넣을 수도 있고

>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}

문자열을 넣을 수 있다.

 

빈 집합은 s = set() 로 만들 수 있다.

 

하지만 여기서 이상한 점은 s2 안에 있는 Hello 라는 문자열이 저장된 모습이다. l이 하나만 저장되었고 순서가 바뀌었다.

이는 집합 자료형의 특징 때문이다.

  • 중복을 허용하지 않는다.
  • 순서가 없다(unordered).
set은 중복을 허용하지 않기에 데이터의 중복을 제거하기 위한 필터로 사용된다.

 

리스트나 튜플은 순서가 있는 자료형이라 인덱싱으로 요솟값을 얻을 수 있지만, set 자료형은 순서가 없는 자료형이기에 인덱싱을 통해 요솟값을 얻을 수 없다. 이는 딕셔너리도 마찬가지로 인덱싱을 지원하지 않는다.

 

만약 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환해야 한다.

>>> s1 = set([1, 2, 3])
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1)
>>> t1
(1, 2, 3)
>>> t1[0]
1

 

교집합, 합집합, 차집합

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

교집합

s1과 s2의 교집합을 구할 때 '&'을 이용하거나 intersection 함수를 사용한다.

>>> s1 & s2
{4, 5, 6}
>>> s1.intersection(s2)
{4, 5, 6}

합집합

합집합은 '|'을 사용하거나 union 함수를 사용한다.

>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

차집합

차집합은 '-'를 사용하거나 difference 함수를 사용한다.

>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}
>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}

 

집합 관련 함수

값 1개 추가 - add

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

 

값 여러 개 추가 - update

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

 

특정 값 제거

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

 


불 자료형

다음과 같이 변수 a,b에 True, False를 지정해보자

>>> a = True
>>> b = False

 

따옴표가 없는 문자열이지만 오류가 발생하지 않고 변수의 자료형이 bool로 지정되어 있다.

>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>
type(x)는 x의 자료형을 확인하는 내장 함수이다.

 

불 자료형은 조건문의 리턴 값으로도 사용된다.

>>> 1 == 1
True

'1과 1이 같은가?'를 묻기 때문에 True 또는 False를 리턴한다. 1과 1은 같으니 True를 리턴한다.

>>> 2 > 1
True

2는 1보다 크니 True를 리턴한다.

>>> 2 < 1
False

2는 1보다 작지 않으니 거짓으로, False를 리턴한다.

 

자료형의 참과 거짓

자료형의 참과 거짓은 자주 쓰이는 것이라 중요하다.

하지만 이 글에서 반복문, 조건문을 다루기에는 무리가 있고, 그 파트를 공부하며 정리해도 충분하다.

자료형들의 참과 거짓을 구분하는 기준만 보고가자.

참 or 거짓
"python"
"" 거짓
[1, 2, 3]
[] 거짓
(1, 2, 3)
() 거짓
{'a': 1}
{} 거짓
1
0 거짓
None 거짓

위에 써있는 기준을 통해서 조건문이나 반복문에서 사용된다.

참이냐 거짓이냐에 따라 실행이 달라지는 방식을 사용한다.

 

불 연산

bool 함수를 통해 참과 거짓을 식별할 수 있다.

다음 코드를 통해 알아보자

>>> bool('python')
True

>>> bool('')
False

>>> bool([1, 2, 3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True

 

이정도면 파이썬의 50%는 습득했다고 본다. 그만큼 자료형은 가장 중요한 부분이기도 하다.

이어서 변수 파트를 다루면서 파이썬 기초 파트를 마치겠다.

 


변수

지금 설명할 내용은 가볍게 읽고 지나가도 된다. 파이썬 코드를 사용하다보면 알아서 익히게 되는 부분이다.

 

우리는 지금껏 변수를 사용했다. 다음 예와 같은 a,b,c를 변수라고 한다.

>>> a = 1
>>> b = "python"
>>> c = [1, 2, 3]

변수는 위 예처럼 =(assignment) 기호를 사용한다.

 

변수란?

데이터를 담을 수 있는 상자라고 생각한다. 책에서는 객체를 가리키는 것이라고 표현한다. 여기서 객체는 우리가 지금까지 본 자료혀으이 데이터와 같은 것을 의미한다.

a = [1, 2, 3]

위 코드처럼 작성하면 [1, 2, 3]이라는 값을 가지는 리스트 데이터가 자동으로 메모리에 생기고 이 데이터들의 메모리 주소를 자리키는 것을 변수라고 한다.

a 가 가리키는 메모리의 주소는 다음과 같이 확인할 수 있다.

>>> a = [1, 2, 3]
>>> id(a)
4303029896

 

 

리스트 복사

이번에는 쉽지만 혼동할 수 있는 복사를 설명한다.

>>> a = [1, 2, 3]
>>> b = a

b변수에 a 변수를 대입하는 어떻게 될까, 결론부터 말하면 b는 a와 같다.

쉽게 생각하는 것처럼 객체가 2개가 생긴 것이 아닌 메모리 상에 [1, 2, 3]을 바라보는 변수가 하나 더 생겼을 뿐이다.

>>> id(a)
4303029896
>>> id(b)
4303029896

주소를 통해 동일하다는 것을 알았고 파이썬 명령어인 is를 실행해도 같은 참을 리턴한다.

>>> a is b  # a와 b가 가리키는 객체가 같을까?
True

 

값을 복사했다기에는 

>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]

a의 값을 바꿨을 때 b의 값도 바뀐다. 이를 통해 같은 주소를 참조할 뿐이라는 결론이 나온다.

 

그럼 데이터만 복사할 수는 없을까? 당연히 된다. 다음 2가지 방법을 사용해보자

[:] 이용

>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]

a의 요솟값을 바꿔도 b에는 영향이 없다.

 

copy 모듈 이용

>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a)

처음보는 부분인 from copy import copy라는 문장이 나온다. 이것은 모듈파트에서 다룰 것이니 지금은 함수를 쓰기 위해 어디선가 꺼내오는거라 생각하자.

>>> b is a
False

두 변수의 값은 같지만 다른 객체를 가리키는 것이라 확인할 수 있다.

 

위 함수를 파이썬의 모듈에 들어있는 함수지만 리스트의 자체 함수에도 copy가 있어 사용해도 된다. 사용 형태는 다르다.

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> b is a
False

 

변수를 만드는 여러 방법

튜플을 통해 a, b에 대입할 수 있다.

>>> a, b = ('python', 'life')

다음 코드와도 동일하게 작동한다.

>>> (a, b) = 'python', 'life'

튜플은 괄호를 생략 가능하다.

 

리스트로 변수를 만들 수 있다.

>>> [a, b] = ['python', 'life']

 

여러 개의 변수에 같은 값을 넣을 수도 있다.

>>> a = b = 'python'

 

 

파이썬은 다음 방법을 통해 두 변수의 값을 매우 간단하게 바꿀 수 있다.

>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3