본문 바로가기

Etc/Python

#06 자료형의 참과 거짓, 변수

자료형의 참과 거짓


 C에서는거짓이라고 하면 0은 거짓 이외에는이라고 익히 듣게 되고, 본격적인 참과 거짓을 담는 Boolean은 객체에서 처음 접하게 되었는데 파이썬을 할때에도 응용을 위해서 짚고 넘어가야하는 부분이다. 


 간단하게 생각해보자면 "", [], (), {}, 0, None 처럼 비어있거나 0, None 거짓이고 이외에는이된다.


응용되는 방식들을 간단하게 살펴보자.


>>> a = [1, 2, 3, 4]

>>> while a: ... a.pop() ... 4 3 2 1


 아직 Python의 While문을 배우진 않았지만 뒤에 조건이 참이면 실행되는 것을 대강 눈치챌 수 있다. 

그러니 위의 코드에선 a에 값이 계속 pop으로 꺼내지다가 결국 [ ]이 되어버려(비어져버려) 중지되는 것을 확인할 수 있다.


>>> if [ ]:

... print("True") ... else: ... print("False") ... False


 이 또한 아직 Python의 if문을 배우지는 않았지만 대강 눈치 채기에 비어있기에 False가 출력되는 것을 알아챌 수 있다.




변수


>>> a = 1

>>> b = "python" >>> c = [1,2,3]


 위의 예시 모든것들은 변수이며, Python은 변수를 쓸때 자료형을 쓸 필요가 없다. 또한 선언법은 역시나 변수명 = 변수에 저장할 값 이다.





 변수를 만드는 여러 방법


>>> a, b = ('python', 'life')


>>> (a, b) = 'python', 'life'


>>> [a,b] = ['python', 'life']


>>> a = b = 'python'


>>> a = 3

>>> b = 5 >>> a, b = b, a >>> a 5 >>> b 3




 메모리에 생성된 변수 없애기


 a = 3 으로 3이라는 정수형 객체를 생성시켰다치자. 여기서 이 값을 메모리에서 지우려면 3을 가르키는 레퍼런스 카운트를 0으로 만들면 3은 자동으로 사라진다. 이렇게 객체를 지우는것을 Garbage Collection(쓰레기 수집)이라고도 한다.


>>> a = 3

>>> b = 3 >>> del(a) >>> del(b)

 하지만 사용한 변수를 del 로 일일이 삭제할 필요는 없다. 파이썬은 이 모든것을 자동으로 해주기 때문이다.




 리스트를 변수에 넣고 복사하고자 할 때


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

>>> b = a >>> a[1] = 4 >>> a [1, 4, 3] >>> b [1, 4, 3]


 '복사'는 상당히 혼동하기 쉬운 개념인데 약간 포인터의 느낌이 든다.

a, b 모두 완전히 동일한 리스트를 가르키기 때문에 같이 바뀐다.


 그렇다면 복사를 하되 다른 리스트를 가르키는 방법은 무엇일까?


 1. [:] 이용


>>> a = [1, 2, 3] >>> b = a[:] >>> a[1] = 4 >>> a [1, 4, 3] >>>

[1, 2, 3]

 [ : ]로 넣는다면 a의 전체 요소들을 넣는 느낌이기에 같은 리스트를 가르키진 않아 영향을 주지 않는 것을 확인할 수 있다.


 2. copy 모듈 이용


>>> from copy import copy

>>> b = copy(a)

 from copy import copy는 일단 지금은 copy라는 함수를 쓰기 위해 사용되는 것으로 생각하는 게 좋다.

 b = copy(a)는 b = a[:] 와 동일한 역할을 한다.


>>> b is

False

 정말 다른 객체를 가르키는지 확인하기위해 is로 확인해보면 들어가있는 값은 같아도 다르다고 하는 것을 확인할 수 있다.