전공과목 정리/자료구조

[자료구조💾] 2장 파이썬 자료구조

최연재 2024. 1. 9. 21:38

교재 : 파이썬으로 배우는 자료구조 프로그래밍 (유석종, 휴먼싸이언스)

 

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)만을 추출하여 리스트로 반환한다.