2030 Engineer

[파이썬] 자료구조 시작하기 본문

Programming/자료구조

[파이썬] 자료구조 시작하기

Hard_Try 2020. 3. 31. 17:13

자료구조의 목적은 자료를 구조화해서 데이터를 효율적으로 사용하기 위함이다.

 

컴퓨터에 데이터가 어떻게 저장되는지 알아야 된다.

 

컴퓨터는 크게 2가지에 저장한다.

 

1. 스토리지 (SSD, HDD)

데이터가 영구적으로 저장되며 특히 음악, 사진, 영화 등의 형태가 저장된다.

내 컴퓨터 - 로컬 드라이브에 보이는 용량이 스토리지다.

데이터를 저장하고 받아오는 데 오래 걸린다는 단점이 있다.

정확이 언제 사용할지 모르겠는 파일들을 저장해 놓는 곳이다.

 

2. 메모리 (RAM)

데이터가 임시로 저장되는 곳이다.

한글 문서를 만들 때는 저장 버튼을 누르기 전까지는 메모리에 담겨있다가 저장을 하면

스토리지로 저장되어 저장한다.

데이터를 저장하고 받아오는데 빠르다는 장점이 있다.

 

위의 두가지가 둘다 필요한 이유는 뭘까?

영화를 볼 때 영화 파일은 스토리지에서 한 장면 한 장면 꺼내온다고 생각해보면 시간이 오래걸리기 때문에 끊김이 발생할 수 있다. 이 때문에 메모리에 일부분 복사를 하여 거기서 가져와 보여주는 식으로 하면 끊기지 않게 시청할 수 있게 된다.

 

자료구조는 메모리를 얼마나 잘 활용하는지에 대해 주로 다루므로 메모리 사용법에 대해 익숙해져야 한다.

 

 

🤔 RAM (Random Access Memory)

 

옛날 방식의 비디오는 테이프형식으로 되어있었다. 만약 1시간 10분 부분을 보고 싶다면 테이프를 감아서 보고싶은 위치로 도달할 수 있게 만들어야 한다. 이 방식을 순차 접근이라 한다. 

임의 접근을 하는 RAM은 부분적으로 주소가 나뉘어져 있으므로 한 번에 찾아갈 수 있게 해준다.

메모리는 이렇게 일정한 칸으로 나뉘어져 있고 각 칸에다가 데이터를 저장할 수 있으며 칸마다의 주소도 갖고 있다. 가장 기본적인 용량의 단위는 BYTE이다.

 

🤔 레퍼런스 (reference)

 

x = 95 가 "x는 95다"라는 말은 잘못됐다.

정확히는 95가 저장된 메모리 주소를 불러오는 것이며 "x는 95를 가리킨다"가 더 맞는 표현이다.

데이터에 접근할 수 있게 해주는 값, 주소보다 조금 더 포괄적인 표현.

x = 95

print(x + 5) -> print(95 + 5)로 되는 것은 파이썬이 실제로 변수를 사용할 때는 저장된 값을 알아서 받아온다는 점이 특징이다.

 

🤔 id 함수

# 여러 데이터를 저장한다
list1 = [1, 2]
int1 = 0
float1 = 3.14
set1 = set()
tuple1 = (2, 3)

# 저장한 데이터의 메모리 저장 위치를 받아온다
print(id(list1))
print(id(int1))
print(id(float1))
print(id(set1))
print(id(tuple1))

id함수는 저장한 데이터의 메모리 주소를 정수로 표현한 값을 알나낼 수 있다. 아래는 결과

53861960
1580005280
17710736
55034904
53809064

list2 = list1를 하게 되면 값을 같게 하는 것이 아니라 메모리 값을 참조하는 주소를 같게 하는 것이다.

# 리스트를 정의한다
list1 = [1, 2]
list3 = [1, 2, 3]
    
# Aliasing을 통해 list1과 list2를 같게 한다
list2 = list1
    
# 두 데이터의 메모리를 출력한다
print(id(list1))  # 140657629409160
print(id(list2))  # 140657629409160
print(id(list3))  # 140657629409096

여러 변수가 같은 메모리를 가르키는 것을 Aliasing이라고 한다.

'Programming > 자료구조' 카테고리의 다른 글

[파이썬] Linked list  (0) 2020.04.01
[파이썬] 배열  (0) 2020.03.31
Comments