교재 : 파이썬으로 배우는 자료구조 프로그래밍 (유석종, 휴먼싸이언스)
2.1 파이썬의 특징
- 인터프리터(interpreter) 방식의 언어이다.
- 컴파일 과정 없이 문장 단위로 빠른 실행과 테스트가 가능하다.
- 객체 지향(object-oriented) 언어이다.
- 클래스를 통하여 객체의 속성과 메소드를 정의할 수 있다.
- 동적 타이핑(dynamic typing) 언어이다.
- 변수의 자료형을 선언할 필요 없이 변수에 값이 할당되는 순간, 자료형이 결정된다.
- 리스트, 집합, 딕셔너리 등 군집 자료형 기능이 우수하다.
- 시퀀스(sequence) 자료형과 군집(collection) 자료형 지원 기능이 우수하다.
- 문자열 처리 기능이 뛰어나며 인공지능, 데이터과학 분야에서 활용도가 높다.
- 파이썬 변수는 값(리터럴)에 대한 참조이다.
- 불변 자료형 변수에 대해 참조에 의한 호출(call by reference)을 지원하지 않는다.
- return문이나 클래스 객체 변수를 통해 변경된 값을 전달할 수 있다.
- 배열 대신 리스트를 사용한다.
- 배열과 같이 원소 크기를 미리 지정하는 정적 할당(static allocation)이 아니라 리스트에 원소를 추가할 때마다 크기가 변하는 동적 할당(dynamic allocation) 방식이다.
2.2 파이썬의 자료형
- 시퀸스 자료형 : 리스트, 튜플, 문자열
- 군집 자료형 : 집합, 딕셔너리
- type(변수명)으로 자료형 확인 가능
자료형 | 종류 |
불 형 (bool type) | 불리언(True, False) |
수치 형 (numerical type) | 정수(int), 실수(float), 복소수(complex) |
시퀸스 형 (sequence type) | 리스트(list), 튜플(tuple), 문자열(string) |
군집 형 (collection type) | 집합(set), 딕셔너리(dictionary) |
2.3 파이썬의 변수
1) 파이썬의 변수
- 파이썬에서 변수는 대상 값(리터럴)에 대한 참조(reference)이다.
- 리터럴(literal) : 변수가 참조하는 값, 그것을 참조하는 변수가 없으면 소멸된다.
- 파이썬 자료형은 불변 자료형과 가변 자료형으로 나뉜다.
- 파이썬에서의 swap : 변수가 참조하는 대상 변경
a, b = b, a
- id(변수) : 변수가 참조하는 객체의 주소 반환
2) 불변 자료형 (immutable data type)
- 정수(int), 실수(float), 문자열(string)
- 원래 값의 변경이 불가능하다.
- 불변 자료형 변수를 함수에 매개변수로 전달하면 참조에 의한 호출(call by reference) 방식으로 값을 수정할 수 없다.
3) 가변 자료형 (mutable data type)
- 리스트, 딕셔너리
- 원소를 수정할 수 있음.
- 리스트는 참조 변수들의 모음이며, 함수에 전달하여 참조에 의한 호출(call by reference) 방식으로 값을 수정할 수 있다.
4) 파이썬 함수에 매개 변수 전달
- 리스트와 딕셔너리는 함수에서 참조에 의한 호출을 통해 수정이 가능하지만 불변 자료형에 대해서는 이 방법을 지원하지 않는다.
- 불변 자료형 값의 변경을 위해 반환문(return), global 키워드, 그리고 객체의 멤버 변수를 이용해야 한다.
5) 변수(객체)의 복사
(1) 별명 (alias) : 두 변수가 하나의 객체를 동시에 참조하여 공유(sharing)하는 것
(2) 얕은 복사 (shallow copy)
- 변수를 복사하여 새로 생성하지만, 참조하는 리터럴은 공유하는 복사 방법
- copy 모듈의 copy() 함수를 사용
import copy
A = [[2, 3, 4], 5]
B = copy.copy(A) # B = list(A)와 동일
(3) 깊은 복사 (deep copy)
- 변수와 대상 객체(리터럴)를 모두 복제하여 생성한다.
- 변수, 리스트 원소, 원소가 참조하는 객체의 주소가 모두 다르다.
import copy
A = [[2, 3, 4], 5]
B = copy.deepcopy(A)
2.4 리스트
1) 리스트
- 정적 배열(array)은 고정된 개수의원소들이 나열되어 있는 자료형
- 정적 배열은 각 원소 공간에 값이 직접 저장되며 인덱스로 원소 값에 접근한다.
- 파이썬은 정적배열을 지원하지 않으며 리스트를 사용한다.
- 리스트 원소는 값(리터럴)에 대한 참조 변수이며 참조 대상의 자료형이 동일하지 않아도 된다.
- 리스트 크기는 원소의 추가 또는 삭제에 의해 동적으로 변경된다.
2) 리스트의 생성
- 리스트 복합 표현(list comprehension)
list1 = [i for i in range(10)]
- range()와 list() 함수 사용
list2 = list(range(10))
- 빈 리스트 선언 후 원소 추가
list3 = []
for i in range(10):
list3 = list3 + [i] # list3.append(i)
3) 리스트 연산
메소드 | 기능 | 예문 |
append() | 원소 추가 | lst.append('a') |
extend() | 리스트 확장 | lst = ['a'] lst.extend(['b', 'c']) |
insert() | 원소 삽입 | lst.insert(1, 'd') |
remove() | 원소 삭제 | lst.remove('b') |
del | 인덱스로 원소 삭제 | del lst[1] |
in not in |
멤버쉽 | 'a' in lst 'b' no in lst |
sort() | 리스트 정렬 | lst.sort() |
reverse() | 리스트 역순 정렬 | lst.reverse() |
2.5 집합과 딕셔너리
1) 집합
- 집합(set) 자료형은 수학의 집합과 유사한 자료구조로 집합 연산자이다.
- 원소의 멤버쉽을 판단 : in, not in
- 집합 연산
- 합집합 |
- 교집합 &
- 차집합 -
- 집합에 원소 추가 : add()
- 집합의 원소 제거 : remove()
- 집합에 여러 원소를 한 번에 추가 : update()
- 원소의 나열 순서가 없으며 원소의 중복을 허용하지 않는다.
- 인덱스로 원소 참조 불가
- 집합의 중복 원소를 제거하는 경우에 유용하다.
- 집합은 set() 함수 또는 {} 기호를 사용하여 생성한다.
s1 = set([1, 2, 3, 3, 2, 1])
s2 = {1, 2, 3} # s1과 s2는 동일함.
s3 = {2, 3, 4, 'a'}
s3.add('b')
s3.update({'c', 'd'})
s3.remove(3)
2) 딕셔너리
- 각 항목이 키(key)와 값(value)의 쌍으로 구성된 자료형
- 딕셔너리의 항목은 키를 통해 접근한다.
- 기본 함수
- items() : 딕셔너리의 각 항목을 튜플(key, value) 리스트로 반환한다.
- keys() : 딕셔너리의 각 항목의 키(key)만을 추출하여 리스트로 반환한다.
- values() : 딕셔너리의 각 항목의 값(value)만을 추출하여 리스트로 반환한다.
'전공과목 정리 > 자료구조' 카테고리의 다른 글
[자료구조💾] 6장 이진 트리 (0) | 2024.01.18 |
---|---|
[자료구조💾] 5장 연결 리스트 (0) | 2024.01.17 |
[자료구조💾] 4장 스택과 큐 (0) | 2024.01.16 |
[자료구조💾] 3장 재귀호출 (2) | 2024.01.10 |
[자료구조💾] 1장 자료구조 개요 (2) | 2024.01.09 |