본문 바로가기

Programming languages/Python

4. Data Type(Bool & Variable)

728x90
반응형

<Bool>

 

Bool이란 Boolean의 약자이다. 참, 거짓으로 판단하는 자료형이다.

쉽게 생각하면 0은 거짓 1은 참을 의미한다.

a = True #bool형 변수 a에 '참'을 대입
b = False #bool형 변수 b에 '거짓'을 대입

print(type(a)) #자료형 반환
print(type(b)) #자료형 반환

print(int(a)) #정수형으로 형 변환
print(int(b)) #정수형으로 형 변환

print(1==1) #참인 명제
print(1==2) #거짓인 명제

print(bool("Hello!")) #값이 존재하기 때문에 True
print(bool(0)) #값이 0이므로 False
print(bool(1)) #값이 1이므로 True
print(bool("0")) #값이 '0' 이라는 문자 이므로 True
print(bool([])) #값이 빈 리스트 즉 없기 때문에 False

 위의 실행 결과는 다음과 같다.

<class 'bool'>
<class 'bool'>
1
0
True
False
True
False
True
True
False

 

bool() 함수는 참, 거짓을 판단해준다.

type() 함수는 해당 변수의 자료형을 알려준다. 

1, True는 참 0, False는 거짓을 의미한다. 대문자에 유의하자

"python"
"" 거짓
[1, 2, 3]
[] 거짓
() 거짓
{} 거짓
1
0 거짓
None 거짓

위 표를 참고하면 값이 존재하거나 1이면 참, 0이거나 값이 존재하지 않으면 거짓 임을 알 수 있다.

파이썬에서는 None도 거짓으로 취급한다.

 

<Variable>

 

Variable 이란 변수이다.

변수는 데이터를 저장하기 위해 이름을 할당받은 메모리 공간이라고 생각하면 좋을 것 같다.

 

a = 1
b = "I'm tired"
c = [1,2,3]
d = (4,5,6)
e = set([7,8,9])
f = {10,11,12}

print(a)
print(b)
print(c)
print(d)
print(e)
print(f)

print('='*15)

print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(e))
print(type(f))

g = a
print(id(a)) #변수의 메모리에서 주소
print(id(g)) #a를 복사한 g의 메모리 주소

print(a is g) #a==g 인가?

위의 코드의 결과는 다음과 같다.

1
I'm tired
[1, 2, 3]
(4, 5, 6)
{8, 9, 7}
{10, 11, 12}
===============
<class 'int'>
<class 'str'>
<class 'list'>
<class 'tuple'>
<class 'set'>
<class 'set'>

4330963184(매번 바뀜)

4330963184(매번 바뀜)

True

 

파이썬은 자료형을 미리 지정하는 것이 아니고 대입된 값에 따라서 자동으로 자료형이 결정된다.

다른 자료형 끼리의 연산은 형 변환이 동반되어야 할 때도 있다.

파이썬에서 변수 == 객체라고 볼 수 있다.

우리가 a, b, c, d, e로 지정한 변수들은 해당 요소, 리스트, 튜플, 집합 등의 메모리에서의 위치를 가리키는 역할을 한다.

즉 우리가 a라는 변수를 호출하면 a는 본인에게 할당된 메모리의 주소로 찾아가서 해당 값들을 규칙에 맞게 읽어오는 것이다.

이는 id() 함수로 확인 가능하다. 위의 g 같은 경우도 a와 같은 값을 가리키도록 만들어줬기 때문에 같은 메모리 주소가 나온다.

'is'라는 명령어를 통해서 a == g라는 값도 True라는 것을 받았다.

from copy import copy # copy()함수 사용을 위해 모듈 불러오기

a = [3,4,5,6] #리스트 a 생성
b = a[:] #리스트 a 전체 복사

a[0] = 7

print(a)
print(b)

b= a[:] #바뀐 a를 b에 전체 복사
c = copy(a) #copy 함수를 이용해서 a를 c에 복사
print(b)
print(c)

print(b is a) #b == a?
print(c is a) #c == a?
print(c is b) #c == b?

(x,y) = ('Hello', 'World!') #튜플 생성
print((x,y))

[m,n] = [1.5,9.5] # 리스트 생성
print([m,n])

z = k = 16 #여러개의 변수에 같은 값 대입
print(z)
print(k)

[m,n] = [n,m] #리스트 안의 두 변수의 값 바꾸기
print([m,n])

위 프로그램의 결과는 다음과 같이 나온다.

[7, 4, 5, 6]
[3, 4, 5, 6]
[7, 4, 5, 6]
[7, 4, 5, 6]
False
False
False
('Hello', 'World!')
[1.5, 9.5]
16
16
[9.5 1.5]

 

이전 g 와 a에서와 다르게 '[:]' 혹은 'copy()' 함수를 사용해서 만들어진 다른 리스트 혹은 변수들은 원본(a를 원본이라 칭함)이 가리키는 메모리 주소와 다르다는 것을 알 수 있다. '='을 사용해서 변수를 복사했을 때는 동일한 메모리 주소를 가리키는 것과 대조된다.

쉽게 생각하면 a=b 는 데이터가 있는 위치에 a와 똑같은 목적지를 가진 b라는 길을 뚫어준 것이다.

'[:]' 혹은 'copy()'를 통한 복사는 a의 목적지와 똑같이 생긴 장소를 베껴서 다른 곳에 만들어서 b라는 길을 뚫어준 것이다.

밑에 다양한 변수 생성 방법도 적어놨기에 확인해보면 도움이 될 것 같다.

728x90
반응형

'Programming languages > Python' 카테고리의 다른 글

5. Control Statement(if, while & for)  (0) 2021.12.08
Examples) Chapter 1&2  (0) 2021.12.07
3. Data Type(Dictionary & Set)  (0) 2021.12.06
2. Data Type(List & Tuple)  (0) 2021.12.06
1. Basic & Data Type(Number, String)  (0) 2021.12.06