# Data Structure and Python data structure

---

**Contents**

**1️⃣** 자료구조의 개요  
**2️⃣** 자료구조의 분류와 유형별 특징  
**3️⃣** 파이썬의 자료형

---

## **1️⃣ 자료구조의 개요**

**자료구조의 개념**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727246781204/dff8d159-b00a-4edc-ae7f-43047cb77621.png align="center")

1. **자료구조의 개념**:
    

자료구조는 **데이터를 효율적으로 저장, 접근, 수정**하기 위한 **함수나 명령어**를 포함한 구조체를 의미한다. 즉, 데이터를 관리하고 처리하는 방식에 대한 체계적 구조를 의미한다.

2. **자료구조와 알고리즘과의 관계**:
    

* **자료구조**는 데이터를 **저장**하고 **관리**하는 도구를 제공한다.
    
* **알고리즘**은 이러한 자료구조를 사용하여 **데이터를 조작**하고, **특정 작업**을 수행한다.
    

따라서, 💡<mark>자료구조는 데이터를 저장하는 방식</mark>이고, 💡<mark>알고리즘은 그 데이터를 이용해 </mark> **<mark>효율적으로 문제를 해결하는 방법</mark>**을 의미한다.

---

**자료구조의 분류와 유형별 특징 #1:  
자료구조의 분류**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727246942891/ac35f217-45ef-4302-8362-40504503e4ad.png align="center")

자료구조는 크게 **스칼라형**, **선형**, **비선형**으로 나눌 수 있다. 자료구조는 데이터의 저장과 접근 방식을 결정하는 중요한 개념이며, **선형 자료구조**는 데이터가 순차적으로 배열되는 반면, **비선형 자료구조**는 보다 복잡한 연결 관계를 가지는 특징이 있다. **스칼라형**은 단일 데이터를 저장하는 기본 자료형들로 이루어져 있다.

1\. **스칼라 (Scalar)**

* **뜻**: **단일 값을 가진 데이터**를 의미한다.
    
* **설명**: 스칼라는 크기만으로 표현되는 값을 뜻하며, 하나의 숫자, 문자 등 단일 요소를 나타낸다. 예를 들어, 정수(int), 실수(float), 문자(char) 같은 기본 자료형이 스칼라에 해당한다.
    

2\. **선형 (Linear)**

* **뜻**: **데이터가 일렬로 나열된 구조**를 의미한다.
    
* **설명**: 선형 자료구조는 데이터를 순차적으로 배열하며, 데이터들이 일직선으로 연결된 형태이다. 배열(array), 리스트(list), 스택(stack), 큐(queue)와 같은 구조가 선형 자료구조에 속한다. 데이터를 차례로 처리하거나 순서대로 접근할 수 있는 특성을 가진다.
    

3\. **비선형 (Non-linear)**

* **뜻**: **데이터가 여러 방향으로 연결된 구조**를 의미한다.
    

* **설명**: 비선형 자료구조는 데이터가 단순히 일렬로 나열되지 않고, **계층적**이거나 **복잡한 연결 구조**를 가진다. 예를 들어, 트리(tree)나 그래프(graph)는 비선형 자료구조에 속한다. 이런 구조에서는 한 데이터가 여러 데이터와 연결될 수 있어, 복잡한 관계를 나타낼 수 있다.
    

**<mark>💡요약</mark>**

* **스칼라**: 단일 값 (예: 정수, 실수, 문자)
    
* **선형**: 데이터가 일렬로 나열된 순차적 데이터 구조 (예: 배열, 리스트, 스택, 큐)
    
* **비선형**: 일직선으로 나열되지 않고 계층적 또는 복잡한 연결 구조 (예: 트리, 그래프)
    

---

**자료구조의 분류와 유형별 특징 #2:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727246942891/ac35f217-45ef-4302-8362-40504503e4ad.png align="center")

---

**배열(Array)**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727247743181/3e423233-f5ee-4646-ab67-70964738c84a.png align="center")

1\. **배열의 개념**요약

**정의**: 배열은 **연속된 공간에 데이터를 저장**하고, **인덱스**를 통해 각 값에 빠르게 접근하는 장점이 있지만 크**기가 고정**되어 있고 **중간에 삽입/삭제**가 어려운 단점이 있다. 이러한 특성으로 인해 고정된 크기의 데이터를 처리하거나, 삽입/삭제가 빈번하지 않은 경우에 적합한 자료구조입니다.

**구조**: 배열의 각 요소는`인덱스`를 가지고 있어, 인덱스를 통해 빠르게 원하는 요소를 찾아 접근할 수 있다. 배열은 메모리 상에서 연속적으로 저장된다.

---

`인덱스(index)` 배열에서 **데이터의 위치를 나타내는 번호이다.** 데이터는 **연속된 메모리 공간**에 저장되며, 각 데이터에 접근하기 위해서 **인덱스**를 사용한다.

---

2\. **배열의 특징**:

* **동일한 자료형의 값만 저장(Only values of the same data type can be stored) :** 배열은 처음 선언될 때 **같은 자료형**의 값들로만 구성된다. 예를 들어, 정수형 배열은 오직 정수형 값만 저장할 수 있다.
    
* **크기가 고정(The size is fixed):** 배열의 크기는 선언될 때 **고정**되며, 이후에 **크기를 변경할 수 없다**. 즉, 한 번 설정된 배열의 크기는 늘리거나 줄일 수 없다.
    
* **중간에 값 삽입 또는 삭제가 어려움(It is difficult to insert or delete values in the middle):** 배열의 중간에 **새로운 값을 삽입**하거나 **기존 값을 삭제**하는 작업은 어려운 편이다. 이를 위해서는 다른 요소들을 이동시켜야 하므로 **시간이 많이 소요**되게 된다.
    

---

**자료구조의 분류와 유형별 특징 #3:  
리스트(List)**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727248426709/722a0a5a-2225-491c-baba-56459c7c8e14.png align="center")

**리스트 개념 요약:**

* **정의**: 리스트는 **값과 포인터를 쌍으로 갖는 노드들이 포인터로 연결**된 자료구조이다. 각 노드는 데이터 값과 다음 노드를 가리키는 **포인터**로 이루어져 있다.
    
* **구조**: 리스트의 첫 번째 노드를 **Head**, 마지막 노드를 **Tail**이라고 부르며, 각 노드는 다음 노드로 연결된다. 리스트는 배열과 달리 **연속된 메모리 공간**에 저장되지 않으며, 각 노드는 임의의 위치에 저장된다. **크기가 가변적**이며, **중간 삽입/삭제**가 용이한 장점이 있지만, **순차적으로 접근**해야 한다는 단점이 있다. 리스트는 데이터를 **자주 삽입하거나 삭제**해야 하는 경우에 적합한 자료구조이다.
    

**리스트의 특징**:

1. **순차적 접근(Sequential access)**
    
    * 특정 노드에 접근하려면 **Head에서부터 순차적으로** 접근해야 한다. 인덱스가 없기 때문에 원하는 데이터를 찾기 위해선 리스트의 앞에서부터 차례대로 탐색해야 한다.
        
2. **가변적인 크기(Variable size)**
    
    * 리스트는 배열과 달리 **크기가 고정되지 않고 가변적**이다. 즉, 리스트의 크기는 데이터가 추가되거나 삭제될 때마다 동적으로 변한다고 할 수 있다.
        
3. **삽입과 삭제가 용이(Easy insertion and deletion)**
    
    * 리스트는 **중간에 새로운 값을 삽입**하거나 **기존 값을 삭제**하는 작업이 **용이**하다. 포인터만 변경하면 되기 때문에, 배열처럼 데이터의 이동이 필요하지 않다.
        

---

**자료구조의 분류와 유형별 특징 #4:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727248710645/1bb992a7-ae7e-464a-98fa-735536487e1b.png align="center")

**스택(Stack)**

스택은 **가장 나중에 들어온 데이터가 가장 먼저 나가는** 자료구조, 즉 **LIFO(Last In, First Out)** 방식으로 동작한다. **삽입과 삭제**는 항상 **top**에서 이루어진다. 파이썬의 경우 **리스트**를 사용하여 스택을 쉽게 구현할 수 있다. 스택은 데이터의 **순서가 중요**한 작업에 적합한 자료구조이다.

1\. **스택의 개념**

* 정의: 스택은 **가장 최근에 삽입된 데이터가 가장 먼저 삭제되는** 구조이다. 데이터의 삽입과 삭제가 **한쪽 끝(top)**에서 이루어진다.
    
* **연산 과정**: 스택에서는 데이터를 **삽입(push)**하거나 **삭제(pop)**할 때, top에 있는 데이터가 대상이 된다. 따라서, 가장 나중에 추가된 데이터가 가장 먼저 나가게 된다.
    

2\. **스택의 특징**

* **삽입과 삭제는 top에서 결정**: 스택은 **top**이라는 포인터 하나를 사용하여 **삽입과 삭제**를 관리한다. 모든 연산이 top을 기준으로 이루어지기 때문에, top이 바뀌면서 새로운 데이터가 추가되거나 제거된다.
    
* **리스트를 활용한 구현 가능**: 파이썬에서는 **리스트(List)**를 활용하여 스택을 쉽게 구현할 수 있다. 리스트의 **append()** 메서드를 통해 데이터를 추가하고, **pop()** 메서드를 통해 데이터를 제거할 수 있다. 이를통해 자료구조의 스택 개념을 사용한 것을 알 수있다.
    

---

**자료구조의 분류와 유형별 특징 #5:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727248901242/66a2fbe1-4708-4cef-a65d-355809d7c91e.png align="center")

**큐(Queue)**

큐는 **가장 먼저 들어온 데이터가 가장 먼저 나가는** 자료구조로, **FIFO(First In, First Out)** 방식으로 동작한다. **데이터의 삽입은 rear**, **삭제는 front**에서 이루어진다. 일상생활의 **선착순** 개념과 유사하며, **먼저 들어온 데이터가 먼저 처리되는 상황**에 적합한 자료구조이다.

1\. **큐의 개념**:

* **정의**: 큐는 **가장 먼저 들어온 데이터가 가장 먼저 나가는** 방식으로 동작하는 자료구조이다. 데이터를 삽입하는 위치는 **rear**이고, 데이터를 삭제하는 위치는 **front**이다.
    
* **연산 과정**: 큐에서는 데이터가 **rear**에서 삽입되고, **front**에서 삭제됩니다. 즉, **먼저 삽입된 데이터가 먼저 나가게 되는 구조**이다.
    

2\. **큐의 특징**:

* **양방향 포인터 사용**: 큐는 데이터를 삽입할 때는 **rear 포인터**에서, 데이터를 삭제할 때는 **front 포인터**에서 작업이 이루어진다. **양방향**으로 데이터의 출입이 일어나게 된다.
    
* **일상생활의 선착순과 같은 개념**: 큐는 **일상생활에서의 선착순**과 유사한 개념이다. 예를 들어, 줄을 서서 대기하는 상황과 같아서, 먼저 온 사람이 먼저 처리되는 것과 같다.
    

---

**자료구조의 분류와 유형별 특징 #6:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727249022300/cd4650e6-04b0-428d-8a98-d729824a4bd0.png align="center")

**  
그래프(Graph)**

그래프는 **정점(Vertex)과 간선(Edge)**으로 구성된 복잡한 자료구조로, **정점 간의 연결 관계**를 나타낸다. 이를 효율적으로 처리하기 위해 다른 자료구조를 사용하며, 그래프는 여러 알고리즘에서 중요한 요소로 다뤄지고 있다.

1\. **그래프의 개념**:

* **정의**: 그래프는 **정점**(Vertex, 노드)과 **간선**(Edge, 정점을 연결하는 선)으로 구성된 자료구조이다. 정점들은 서로 간선으로 연결되어 네트워크와 같은 구조를 형성한다.
    
* **구성 요소**:
    
    * **정점(Vertex)**: 그래프의 각 노드.
        
    * **간선(Edge)**: 정점 간의 연결을 나타냄.
        

2\. **그래프의 특징**:

* **다른 자료구조의 필요성**: 그래프를 표현하기 위해서는 **에지 리스트(edge list)**, **인접 행렬(adjacency matrix)**, **인접 리스트(adjacency list)**와 같은 **다른 자료구조**가 필요하다. 이는 그래프의 연결 관계를 효율적으로 저장하고 탐색하기 위해 사용된다.
    
* **알고리즘에서 중요하게 다뤄짐**: 그래프는 **다양한 알고리즘**에서 중요한 역할을 하며, 특히 **경로 탐색**Pathfinding (예: 최단 경로 shortest path), **네트워크 분석(**network analysis) 등에서 핵심적으로 사용된다.
    

---

**자료구조의 분류와 유형별 특징 #7:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727249135343/67e1d7a5-fedb-402b-b4ad-61606a04ba10.png align="center")

**  
트리(Tree)**

트리는 **정점과 간선 간에 순환(사이클)이 없는 그래프의 일종**으로, **계층적인 구조**를 가진다.**부모-자식 관계**로 노드들이 연결된다. 트리는 그래프의 일종이지만 **순환(사이클)이 없는** 특징이 있으며, **데이터의 탐색과 정렬**에 매우 유용한 자료구조이다. 다양한 트리의 종류는 각기 다른 용도로 사용된다.

1\. **트리의 개념**:

* **정의**: 트리는 **정점과 간선**으로 이루어진 자료구조로, **순환(사이클)이 없는 그래프**이다.트리에는 한 개의 **루트 노드**가 있으며, 루트에서부터 자식 노드로 연결되는 구조이다.
    
* **구성 요소**:
    
    * **루트(Root)**: 트리의 시작점이 되는 노드.
        
    * **부모(Parent)와 자식(Child)**: 부모 노드는 다른 노드들을 가리키며, 자식 노드는 그 부모 노드로부터 연결된 노드를 말한다.
        

2\. **트리의 특징**:

* **루트 노드가 존재**: 트리는 **한 개의 루트 노드**를 가지고 있으며, 루트 노드에서 시작해 다른 노드들과 연결된다.
    
* **부모-자식 관계**: **루트 노드**를 제외한 모든 노드는 **한 개의 부모 노드**를 가지고 있다. 자식 노드는 여러 개가 있을 수 있다.
    
* **다양한 트리의 종류**: 트리는 여러 종류가 있으며, **이진 탐색 트리(Binary Search Tree)**, **AVL 트리**, **레드-블랙 트리(Red-Black Tree)**, **B-트리** 등이 있다. 각 트리는 **삽입, 삭제, 탐색**에서의 성능과 특성에 따라 사용된다.
    

---

**자료구조의 분류와 유형별 특징 #8:**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727249303814/efbbccdb-f56a-499d-a188-45bcecd551d2.png align="center")

**주요 자료구조와 연관된 알고리즘**

**배열 (Array)**:

* **정렬 알고리즘**: 버블 정렬, 선택 정렬, 퀵 정렬, 병합 정렬 등 배열에 저장된 데이터를 정렬하는 알고리즘.
    

* **선택 알고리즘**: 배열 내에서 최소값이나 최대값을 찾는 알고리즘.
    

**스택 (Stack)**:

* **깊이 우선 탐색 (DFS)**: 그래프나 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘. , 스택은 함수 호출의 기본 매커니즘과 연관이 있다.
    

**큐 (Queue)**

* **너비 우선 탐색 (BFS)**: 그래프나 트리의 넓은 부분을 우선적으로 탐색하는 알고리즘
    

**그래프(Graph)**

* **너비 우선 탐색 (BFS)**: 정점을 차례로 방문하는 알고리즘.
    
* **깊이 우선 탐색 (DFS)**: 그래프의 깊은 부분을 먼저 탐색하는 알고리즘.
    
* **최소 신장 트리 (MST)**: 모든 노드를 연결하는 최소 비용의 간선을 선택하는 알고리즘.
    
* **최단 경로 탐색**: 그래프에서 두 정점 간의 최단 경로를 찾는 알고리즘 (예: 다익스트라 알고리즘).
    

**트리 (Tree)**

* **이진 탐색 트리 (Binary Search Tree)**: 중위순회 방식으로 데이터를 정렬하는 트리 구조.
    
* **레드-블랙 트리 (Red-Black Tree)**: 자동으로 균형을 유지하는 이진 탐색 트리.
    
* **B-트리**: 대용량 데이터를 저장하기 위한 트리 구조로, 노드가 다수의 자식을 가질 수 있는 트리.
    

---

## **3️⃣** 파이썬의 자료형

**파이썬의 자료형**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727250328580/e015a187-3f2c-42f5-aff6-d2651c94881e.png align="center")

**<mark>💡요약 </mark>** 파이썬의 자료형은 크게 **단순형**과 **복합형**으로 나뉜다. 파이썬에서는 **리스트**를 사용해 배열과 리스트의 기능을 모두 구현할 수 있기 때문에, 굳이 이 둘을 구분할 필요가 없다. 이는 파이썬의 자료형이 매우 유연하다는 것을 보여주며, **인덱스 접근, 삽입, 삭제**가 모두 가능하여 **배열, 리스트와 같은 자료구조**를 쉽게 구현할 수 있게한다.

1\. **파이썬의 자료형**:

* **단순형(Simple type)**: 숫자, 문자열, 불(Bool)과 같이 **하나의 값**을 저장하는 자료형이다.
    
* **복합형(Complex type)**: 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary), 집합(Set)과 같은 **여러 값을 저장**할 수 있는 자료형이다.
    

2\. **리스트의 특징**:

* **배열과 리스트의 특징 모두 포함**: 파이썬의 **리스트**는 컴퓨터 공학에서의 **배열**과 **리스트**의 특징을 모두 포함한다.
    
    * 배열처럼 **인덱스로 데이터에 접근**할 수 있으며,
        
    * 리스트처럼 **삽입과 삭제가 용이**하다.
        
* **구분할 필요 없음**: 파이썬에서는 배열과 리스트를 **구분할 필요가 없으며**, 리스트 하나만으로도 배열과 리스트의 기능을 모두 구현할 수 있.
    

---

**파이썬의 단순자료형(Simple datatype of Python)**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727250510534/e6a05271-e34e-46cc-9368-766209151968.png align="center")

**<mark>💡요약 </mark>** 파이썬의 주요 자료형으로 **숫자**, **문자열**, **불(boolean)**이 있다. 파이썬의 **자동 형변환**은 편리하지만, 특히 **나누기 연산**과 같은 경우에는 다른 자료형으로 변환될 수 있으므로 프로그래머가 주의를 기울여야 한다.

1\. **파이썬의 단순 자료형**:

* **숫자**:
    
    * **정수**(`int`): 예를 들어 `23, -54, 0`과 같은 값.
        
    * **실수**(`float`): 예를 들어 `54.23, -3.4e6`과 같은 값.
        
    * **2진수**(`bin`): 예를 들어 `0b0101`과 같은 값.
        
    * **8진수**(`oct`): 예를 들어 `0o67`과 같은 값.
        
    * **16진수**(`hex`): 예를 들어 `0x4FF`와 같은 값.
        
* **문자열**(`str`): 예를 들어 `"boy"`와 같은 값.
    
* **불(Boolean)**(`bool`): `True`, `False` 값을 가진다.
    

2\. **<mark>💡Key Point - 자동 형변환 주의</mark>**<mark>:</mark>

* 파이썬은 자동으로 **형변환**을 수행하는 경우가 있다. 이는 편리하지만, 때때로 의도하지 않은 결과를 초래할 수 있으므로 주의해야 한다.
    
* 예를 들어, `/` 연산자는 **실수**를 반환하지만, `//` 연산자는 **정수**를 반환한다. 따라서 사용 시 주의해야 한다.
    

---

**파이썬의 리스트**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727250623814/7c54042e-5c49-4a8c-b9f0-cf78c4466c82.png align="center")

**파이썬의 리스트**는 **배열**과 **리스트** 자료구조의 특성을 모두 갖추고 있으며, **인덱스를 통한 접근**, **슬라이싱** 기능과 함께 **원소 삭제, 추가, 삽입**과 같은 동작을 지원한다. 이는 리스트를 매우 유연하게 사용할 수 있게 하며, 배열과 리스트를 구분하지 않아도 파이썬에서 쉽게 자료구조를 다룰 수 있게 한다.

1\. **파이썬 리스트의 선언**:

* **리스트 선언**은 **대괄호**(`[]`)로 감싸서 이루어진다.
    
* 예를 들어, `list_b = [56, 2, 6, 2]`와 같이 선언할 수 있다.
    
* 이때, 리스트는 **컴퓨터 공학에서의 배열과 리스트의 특성**을 모두 가지고 있다.
    

2\. **파이썬 리스트의 배열적 특성**:

* **인덱스를 통한 접근**: 대괄호 `[]`를 사용하여 리스트의 특정 인덱스에 있는 원소에 접근할 수 있다. 예: `list_b[0]`는 `56`에 접근.
    
* **슬라이싱**: `:`를 사용하여 리스트의 일부분을 가져올 수 있습니다. 예: `list_b[1:3]`은 `[2, 6]`을 반환. (리스트 슬라이싱에서 사용되는 `[start:end]` 구문은 **시작 인덱스는 포함**하고, **끝 인덱스는 포함하지 않는** 방식으로 동작)
    
* **인덱스 반환**: `index()` 메서드(method)를 통해 리스트에서 특정 값이 있는 인덱스를 찾을 수 있다.
    

3\. **파이썬 리스트의 리스트적 특성**:

* **삭제**: `del` 키워드를 사용하여 리스트의 원소를 삭제할 수 있다.
    
    * 예: `del list_b[1]`은 `list_b`의 두 번째 원소를 삭제합니다.
        
* **추가**: `append()` 메서드를 통해 리스트 끝에 원소를 추가할 수 있다.
    
    * 예: `list_b.append(10)`은 리스트의 끝에 `10`을 추가한다.
        
* **중간에 원소 추가**: `insert()` 메서드를 사용하여 리스트 중간에 원소를 삽입할 수 있다.
    
    * 예: `list_b.insert(1, 99)`은 인덱스 1 위치에 `99`를 추가한다.
        
* **첫 번째 원소 제거**: `remove()` 메서드를 통해 첫 번째로 등장하는 특정 값을 제거할 수 있다.
    
* **마지막 원소 꺼내기**: `pop()` 메서드를 통해 리스트의 마지막 원소를 꺼내서 제거할 수 있다.
    

---

**파이썬의 튜플**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727251138536/c3e6fdd3-6626-4885-9ec4-6ab6618e712c.png align="center")

튜플은 **리스트와 유사하지만, 원소값을 변경할 수 없다는 특징**을 가진다. 튜플은 **불변성**을 가지고 있어, 데이터를 수정하지 않고 **안정적으로 유지**해야 할 때 적합하다. 선언 방식은 리스트와 유사하지만, 원소 값을 변경할 수 없다는 점이 주요 차이점이다.

1\. **튜플의 선언**:

* 튜플은 **소괄호** `()`로 선언되며, 여러 값을 담을 수 있다.
    
* 예를 들어, `tuple_c = (56, 2, 6, 2)`와 같은 방식으로 튜플을 선언할 수 있다.
    

2\. **파이썬 튜플의 특징**:

* **불변성**: 리스트와 달리, **한 번 선언된 튜플의 값은 변경할 수 없다**. 즉, 튜플은 **불변(immutable)**한 자료형다.
    
* **사용 목적**: 프로그램이 실행되는 동안 **원소값을 변경할 필요가 없을 때** 사용된다. 예를 들어, 좌표나 설정값과 같이 변하지 않는 데이터를 저장할 때 유용하다
    
* **나머지 기능은 리스트와 유사**: 튜플은 불변성을 제외한 다른 기능들은 리스트와 유사하게 동작한다. 예를 들어, 인덱스를 사용해 값을 참조할 수 있다.
    

---

**파이썬의 딕셔녀리**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727251248187/fa083481-f80c-4748-8276-6445a075d258.png align="center")

딕셔너리는 **key와 value를 쌍**으로 가지는 자료형으로, 배열처럼 인덱스로 접근하는 것이 아니라 **key를 통해 사람 친화적으로 데이터 접근**이 가능하다. 또한, **데이터 삽입과 삭제가 용이**하지만, **중복된 key**는 하나만 인식되므로 주의해야 한다.

1\. **딕셔너리의 선언**:

* 딕셔너리는 **중괄호** `{}`를 사용해 선언되며, key와 value는 **콜론(:)**으로 연결된다.
    
* 예를 들어, `dic_d = {1:'one', 2:'two', 3:'three'}`와 같은 방식으로 선언할 수 있다.
    
* 각각의 key-value 쌍은 **콤마(,)**로 구분된다.
    

2\. **파이썬 딕셔너리의 특징**:

* **Key를 사용한 접근**: 배열이 **인덱스**로 값을 접근하는 것과 달리, 딕셔너리는 **key**를 사용해 값을 접근한다. 사람에게 친숙한 방식으로 데이터에 접근할 수 있다.
    
* **삽입 및 삭제 용이**: 리스트처럼 **데이터의 삽입**과 **삭제**가 매우 용이하다. 딕셔너리에 새로운 key-value 쌍을 추가하거나, 기존의 key를 통해 값을 삭제할 수 있다.
    
* **중복 키 처리**: **Key가 중복**되면, 딕셔너리는 **하나의 key만 인식**하고, 중복된 key 중 나중에 선언된 값을 사용하게 되므로 주의하자.
    

---

**파이썬의 집합**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727251348738/5fcca281-736f-4b2f-8012-d5368f6c4639.png align="center")

파이썬의 집합은 **중복을 허용하지 않으며, 순서가 없는** 자료형이라는 특징을 가지고 있다. **수학적인 집합 연산**을 쉽게 처리할 수 있는 자료형이다. 이러한 집합을 **리스트나 튜플**로 변환할 수 있어 유연하게 사용할 수 있다.

1\. **집합의 선언**:

* 파이썬에서 **집합**을 선언할 때는 `set()`을 사용한다.
    
* 예를 들어, `set_e = set([56, 7, 2, 1])`와 같은 방식으로 집합을 선언할 수 있다.
    

2\. **파이썬 집합의 특징**:

* **중복을 허용하지 않음**: 집합에서는 **중복된 값**이 자동으로 제거된다. 즉, 동일한 값이 여러 번 들어가도 하나의 값으로 인식된다.
    
* **순서가 없음**: 집합은 **순서가 없는** 자료형이므로, 리스트나 튜플처럼 인덱스를 사용해 접근할 수 있다.
    
* **수학적 연산 가능**: 파이썬 집합은 수학적 연산인 **교집합(&)**, **합집합(|)**, **차집합(-)** 연산을 할 수 있다.
    

3\. **파이썬 집합의 사용**:

* **원소 추가**: `add()` 메서드를 통해 원소를 추가할 수 있다.
    
* **여러 원소 추가**: `update()` 메서드를 사용해 여러 개의 원소를 추가할 수 있다.
    
* **특정 값 제거**: `remove()` 메서드를 통해 특정 값을 제거할 수 있다.
    
* **리스트나 튜플로 변환**: 집합을 **리스트**나 **튜플**로 변환하여 사용할 수도 있다.
    

---

**학습정리**

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1727250121067/d4791342-06eb-48ca-8724-8fbc305b905d.png align="center")
