돈이 만드는 세상

#1-1 Python 초급 강의 - 자료형 본문

프로그래밍/Python

#1-1 Python 초급 강의 - 자료형

피델리오 2022. 1. 24. 20:53

변수

a = 1  
my_first_var = 3

각 변수에는 주소가 16진수로 이루어진 주소가 존재한다. 변수를 왜 이름으로서 저장하는지에 대해서는 재활용성(Reusability)을 이야기할 수 있다.

target = 1
target = target + 1 * 3 # 4
target * 10 * 10 # 400

### 자료형

파이썬의 가장 큰 특징 중 하나는 자료형에 대한 선언을 따로 하지 않는 것이다. 이것에 대한 장점도 있지만, 단점도 존재한다.

숫자형(integer, float, double)

파이썬 내에서 처리를 할 경우 int/float를 따로 구분하지 않는다. C의 경우 int/float의 bytes에 따라 자료형이 나뉘게 되는데 파이썬은 그럴 필요가 전혀 없다.

  • int
  • float

a = 1이라는 코드를 통해 a에다가 1이라는 숫자를 할당할 경우 파이썬은 숫자라는 것만 인식해 RAM에다가 저장을 한다. C의 경우 int a = 1;를 통해 볼 수 있듯이, data type을 정해주어야 한다. 하지만, 파이썬은 _자료형 선언에 대해 신경을 안 써도 되지만 그만큼 추가적인 시간을 필요_로 하게 된다. _C언어의 경우 컴파일러가 인식하기 전에 개발자가 먼저 정해주기 때문에 속도면에서 파이썬에 비해 빠른 속도_를 보여주게 되는 것이다.

리스트(list)

# python에서 리스트를 만드는 방법
class_score1 = [90, 30, 60]
class_score2 = list(90, 30, 60)

파이썬의 경우 c언어의 배열과 다르게 동일한 속성의 데이터가 아닌 파이썬에서 다루는 어떠한 형태에 데이터든 리스트의 데이터로써 다룰 수 있다.

class_score1 = [1, 2, [1, 2]]
class_score2 = ['hi', 1, [1, 2]]

class_score1[1] # 2가 출력됨

파이썬은 독특한 인덱싱 방법을 지원한다.

class_score1[0:1] # 1
class_score1[0:2] # 1, 2
class_score1[1:] # 2, [1, 2]
class_score1[:2] # 1, 2
class_score1[-2:] # [1, 2], 2
class_score1[:] # 1, 2, [1, 2]

#### 다차원 리스트
[[1, 2], [1, 2, 3]]

[
    [1, 2, 4],
    [1, 2, 3],
    [1, 3, [1, 2]]
]

### 튜플(tuple)
a = (1, 2)
type(a) # tuple

# 인덱싱이 가능하다.
a[1] # 2

**mutable vs immutable**
a = [1, 2]
a[0] = 3
print(a) # [3, 2]

리스트의 경우 mutable해서 변환이 가능하지만 tuple의 경우, immutable하기 때문에 변환이 불가능하다. _이러한 특성 때문에 튜플 자료형에서 변수에 대해 추가/삭제/변경 등의 operation이 일어날 때는, 기존의 값을 전부 버리고, 아예 새로운 값으로 대체된다는 특징_을 갖고 있다.

문자열(string)

a = "string"

문자열을 저장할 때는 _글자 하나당 방(메모리 주소)을 배정해서 저장_한다고 생각하면 된다. 파이썬의 인덱싱 방법들을 이용해서 여러가지 값들을 도출할 수 있다.

a[0] # s
a[1] # t
a[1:2] # tr
a[-3:] # ing
a[-3:4] # i
a[-4:4] # ri

### 딕셔너리(dict)

이름에서 유추할 수 있듯이 사전처럼 저장하는 방식의 자료형이다. keyvalue라는 값이 존재한다. key는 말그대로 사전에서 단어라고 보면되고 value는 그 단어를 설명하는 내용들을 담은 값이라고 생각하면 될 것 같다.

my_dict = {
    123: 456,
    "my_key": 1000
}
# 다만 이런식으로 생성할 경우 key 값에 int형, float형이 오면 안된다. 왜냐하면, 함수를 호출하는 형태로 작동하기 때문에 이부분에서는 어쩔 수 없다.
my_dcit = dict(123=456, my_key=1000) # error

#### 메모리에 저장되는 방식

딕셔너리라는 이름은 파이썬에서만 사용하는 네이밍이다. 원래는 hash table이라는 이름을 가지고 있는 자료형이다. hashtable내부에 해쉬 알고리즘을 통해 저장하기 때문에 hashtable에서 key값에 대한 수정/추출과 같은 과정에서 O(1)의 시간 복잡도 밖에 걸리지 않는다. 그러므로 해당 특성을 이해하고 적재적소에 사용하는 것이 좋다.

my_dict["my_key"] = 2000 # 1000 -> 2000으로 수정된다

### 집합(set)

내부적으로 Hash를 사용하고, Hash는 uniqueness가 보장되기 때문에 다음과 같은 특징을 갖을 수 있다.

a = {1, 2, 3, 1}
a # {1, 2, 3} 출력

my_list = {1, 2, 3, 4, 4}
set(my_list) # {1, 2, 3, 4} set으로 변환해주는 함수를 사용해 list->set으로의 변환

중복된 값이 없다는 것이 집합의 큰 특징이다. 이를 이용해 _데이터셋 간의 비교(교집합, 합집합, 차집합 등)과 빠른 find operation을 활용_하기 위해 쓰입니다.

list, dict, set과 같이 1개 이상의 데이터를 담고 있는 자료형을 iterable한 자료형이라고 한다.

불(bool, boolean)

boolTrue or False를 가지는 자료형입니다. 파이썬은 &&, ||, !을 사용하지 않고 대신에 and, or, not을 사용한다는 특징이 있습니다.

True and False # False
True and True # True
True or False # True
not True or False # False
a = 0
a = a < 1 # a에는 1이 저장됨. True == 1
a != 3 # True, 1 != 3 이므로 True