본문 바로가기
Always Awake/python 기본 정리(19.12.23~20.01.12)

20.01.05 기록

by 욕심많은알파카 2020. 1. 6.

1. ==연산자와 is 연산자의 차이

 

==나 !=는 값 자체를 비교하고

Is, is not은 주어진 두 객체가 같은 객체인지를 비교한다.

 

즉 1 == 1.0에서 1은 1.0과 같은 크기의 값이므로 true이지만

1 is 1.0에서 1과 1.0은 각각 int, float 객체로 서로 다른 객체이므로 false이다.

 

 

2. 파이썬에서 객체 할당방식의 랜덤함

 

파이썬에서 변수가 있는 상태에서 다른 값을 할당하면 메모리 주소가 달라질 수 있다.

 

예를 들어 변수 a= -5라는 할당을 한 후 a와 -5의 id는 같지만,

a=-6이라고 재 할당 할 경우 a는 -6과 다른 id값을 가질수도 있다.

확인해보면 재할당된 a의 경우 -6과도, -5와도 id가 다르다는 것을 알 수 있다.

 

찾아보니 파이썬에서 자주 사용되는 범위(256까지)의 정수값들은 id를 미리 하나로 정해두고 그 메모리값을 자주 참조하지만,

그렇지않은 수들의 경우에는 같은 숫자라도 다른 (id의) 객체로 생성될 수 있다고 한다.

(https://wikidocs.net/2836 참조)

 

따라서 어떤 변수의 값을 확인하고 싶을때는 객체가 같은지 id를 검사하는 is를 사용해서는 안된다.

같은 값을 가지고 있는 여러개의 객체가 존재할 수도 있고,  변수가 재할당되다가 메모리주소가 바뀌어버렸을수도 있기 때문.

 

3.논리연산자(and, or)에서의 단락 평가(short-circuit evaluation)

 

여러개의 값이 주어졌을 때, 논리연산자는 앞에서부터 차례대로 값을 확인한다.

이 때, 확인하다가 만약 뒤의 것을 볼 필요도 없이 이미 평가결과가 정해져 있다면, 뒤의 것을 더 확인하지 않고 해당 시점에서 평가를 종료한다. 또, 평가를 종료하기 전 마지막으로 확인한 값을 결과값으로 반환해준다. 

이를 단락평가라고 한다.

 

예를 들어 

 

print(False or “Always Awake” or “Python” or True)

 

라는 식의 경우, 전체 논리연산이 or이므로 넷 중 하나만 참이라도 평가를 종료하게 된다.

이때 첫번째 false는 거짓이므로 다음 “Always Awake”를 평가하고, 이 값이 참이므로 해당 시점에서 평가를 종료한다. 뒤의 “Python” 이나 True의 값은 평가하지 않는다. 그리고 마지막으로 평가했던 값이 “Always Awake”이므로, 반환되는 값은 다음과 같다.

 

Always Awake

 

4.

리스트와 튜플의 요소들을 여러개의 변수에 각각 할당하기

 

리스트나 튜플 내부에 존재하는 여러개의 요소들을 한번에 여러개의 변수에 따로따로 담으려고 한다면, 아래와 같이 하면 된다.

x = [1,2,3]

a,b,c = x

print(a,b,c)

 

결과값은 1, 2, 3으로,

a에 1, b에 2, c에 3이 차례대로 할당된 것을 볼 수 있다.

튜플도 같은 방식으로 동작한다.

 

이렇게 리스트와 튜플의 여러요소를 한번에 여러 변수에 할당시키는 것을 리스트 언패킹(list unpacking), 튜플 언패킹(tuple unpacking)이라고 한다.

 

반대로 리스트 패킹(list packing)과 튜플 패킹(tuple packing)

임의의 변수에 리스트를 할당하거나 튜플을 할당하는 것을 말한다.

 

하나의 변수에 리스트/튜플 자체를 할당하면 패킹, 여러개의 변수에 리스트/튜플의 여러 요소들을 할당하면 언패킹.

 

-------------------------------------------------------

파이썬 코딩도장(https://dojang.io/course/view.php?id=7)을 참조했습니다.

'Always Awake > python 기본 정리(19.12.23~20.01.12)' 카테고리의 다른 글

20.01.09 정리  (0) 2020.01.09
20.01.06 정리  (0) 2020.01.07
19.12.26 기록  (0) 2019.12.27
19.12.25 기록  (0) 2019.12.26
19.12.24 기록  (0) 2019.12.24

댓글