본문 바로가기
방구석코딩/파이썬 기초문법

[파이썬 기초] 자료형 기능들 - 참/거짓, 저장, 복사, 메모리 삭제(del)

by 석세상 2022. 5. 25.
반응형

앞에서 여러 가지 자료형에 대해서 알아보았다. 자료 형태별로 들어있는 값에 따라 참과 거짓을 구분할 수 있으며 대부분은 비어있는 경우는 거짓이라고 판단한다. 또한 생성한 변수들은 메모리에 저장되는데 메모리는 휘발성 저장 부분이기 때문에 우리가 알고 있는 SAVE와는 달리 임시 저장 형태로 프로그램을 종료 시 날아간다.

 

조금 더 알아보자면 컴퓨터에는 하드디스크 또는 SSD에 저장하는 것은 내가 삭제하지 않는 한 자료로 남아있어 불러오기를 통해 생성한 데이터를 다시 가져올 수 있는 반면, 지금까지 예제를 통해 알아본 부분은 RAM이라는 메모리에 임시 저장되어 있어 프로그램 종료 시에는 다시 실행해야 한다.

 

예를 들자면 하드디스크 1TB, 램 16G인 컴퓨터를 구매했다 치면 파이썬을 실행 시 컴퓨터에서 기본으로 사용하고 있는 램 용량 외에 남아있는 부분만큼 사용 가능한 것이다. 그러므로 대용량의 데이터를 분석할 시에는 램을 구매해서 용량을 늘리거나 한정된 자원 안에서 사용해야 한다면 램이 사용 가능한 만큼에서 일부를 실행하고 데이터를 축소한 뒤 그다음 작업을 해야 할 것이다. 하지만 애초에 기초 데이터가 램 용량보다 크다면 불러오기에 실패할 것이다. 

 

이 부분은 아직 대용량 데이터를 다뤄보지 않았으니 향후에 좀 더 큰 데이터를 다룰 때 다시 설명하도록 하겠다.

 

 

1. 자료형 별 참/거짓 체크

자료형에 참/거짓이라는 게 어떤 의미인지 와닿지 않을 텐데 3 = 6이라고 한다면 거짓이다. 이와 유사하게 각 자료형 별로 참/거짓을 구분하는 기준이 있다는 것을 알아두자. 

  • 문자열 : ""인 경우 거짓이고, "a"라면 참이다. 값이 들어있는 경우는 참, 비어있다면 거짓
  • 리스트 : []인 경우 거짓이고, [1,2]라면 참이다. 값이 들어있는 경우는 참, 비어있다면 거짓
  • 튜플 : ()인 경우 거짓이고, (1,2)라면 참이다. 마찬가지로 값이 들어있는 경우는 참, 비어있다면 거짓
  • 딕셔너리 : {}인 경우 거짓이고, {1:1, 2:1}라면 참이다. 값이 들어있는 경우는 참, 비어있다면 거짓
  • 숫자형 : 0, None인 경우 거짓이고, 1이라면 참이다. 앞의 경우와 다르게 값이 있어도 0인 경우는 거짓

bool 명령어를 사용해서 참/거짓을 알아볼 수 있는데 간단하게 예를 들어보자면 print(bool(1))이라고 입력한 경우는 숫자형 1이라는 값을 가지기 때문에 "True"가 출력되고, print(bool(0))을 입력한 경우는 "False"가 출력된다.

 

그렇다면 어떤 경우 참/거짓인 경우가 필요할까? 실제로 필요한 경우가 있다면 당연히 알 필요가 있겠지만 미리 생각을 해보자면 데이터가 들어왔는지 확인이 필요할 경우이다. 원천 데이터를 불러왔지만 실제로 제대로 값이 들어왔는지 일일이 확인하려고 한다면 눈으로 확인할 수밖에 없고 큰 데이터의 경우 전부 눈으로 확인이 불가능하기 때문에 이런 기능이 필요할 때가 있다.

 

 

 

2. 메모리에 생성된 정보 없애기(del)

앞에서 설명한 바와 같이 메모리에 올릴 수 있는 자원이 한정되어 있기 때문에 메모리가 꽉 차 있다면 그다음 작업이 불가능하기 때문에 기존에 사용했던 메모리에 저장된 데이터 중 중간과정에 생성되거나 불필요한 자료를 메모리에서 삭제할 필요가 있는 경우가 있다. 이럴 때 사용할 수 있는 명령어가 del이고 사용법은 다음과 같다.

  • a = (1,2,3)이라는 데이터가 있는 경우 del(a)라고 입력하면 a라는 변수에 입력된 튜플 데이터가 전체 삭제된다. 확인방법은 a를 실행해보거나 print 해보면 사라진 것을 알 수 있다. 결과창에 name 'a' is not defined이라는 에러 창이 발생한다.

 

3. 자료형 복사하기

파이썬에서 자료 복사는 다른 프로그램과 약간 다를 수 있다. 다른 프로그램은 어떤지 모르겠으나 내가 예전에 사용했던 통계 프로그램과는 다른 결과를 보여준다. 아래 예시의 a와 b의 결과를 보면 알 수 있다.

a = [1, 2, 3]
b = a
a[1] = 1

[입력값] 리스트 a의 값 변경
a

[출력결과]
[1, 1, 3]


[입력값] 리스트 b는 변경하지 않았음
b

[출력결과]
[1, 1, 3]

위의 결과를 보자면 리스트 a의 값을 [1, 2, 3]에서 a[1] = 1로 리스트 a의 두 번째 값을 1로 변경하여 a의 결괏값이 [1, 1, 3]으로 변경된 것을 볼 수 있다. 여기까지는 당연한 결과지만 b의 출력 결과를 보면 b 역시 [1, 1, 3]으로 변경되었음을 알 수 있다. 왜일까? 

 

예제의 두 번째 줄에서 b = a를 풀어보자면 여기까지는 b는 a의 변경 전인 값인 [1, 2, 3]을 가지고 있다. 그다음 줄에서 a의 값을 변경했는데 이때 b의 값도 같이 변경된다. 이유는 b = a 가 그냥 a의 값인 [1, 2, 3]을 가져오는 것이 아니라 a를 가져오는 것이기 때문에 a의 값이 변하면 b도 변하게 되는 것이다. 이 부분이 일반적인 프로그램과 가장 큰 차이점이므로 잘 기억해두도록 하자. 이 부분을 모른다면 나중에 결과가 완전히 다르게 생성될 수 있으니 주의해서 사용하자.

 

그렇다면 b가 a를 복사한 후 위와 같이 a가 변화하는 것에 따라가지 않고 복사 후에도 별도로 b 고유의 값을 가질 수는 없을까? 물론 그 방법도 존재한다. 아래 방법을 이용하면 가능하다.

  • b = a[:] 또는 b = copy(a)를 이용하여 적용하면 이후에는 별도의 값을 가지게 된다.

 

728x90
반응형

댓글