구성원 연산자
구성원 연산자는 아래 표와 같이 두 가지로 나뉘고, 일반적으로 시퀀스 타입에 쓸 수가 있다.
연산자 | 설명 |
in | 구성원에 있다. |
not in | 구성원에 없다. |
s = "abcdef hello"
myList = [10, 20, 30, 40, 50]
myD = {10:"aa", 20:"bb", 30:"cc"}
print("hello" in s)
print("zzz" in s)
print("zzz" not in s)
print(10 in myList)
print(100 in myList)
print(10 in myD)
print("aa" in myD)
#결과
True
False
True
True
False
True
False
예제 코드에서와 같이, in 연산자를 사용하면 “hello”라는 문자열은 s 구성원 안에 포함되어 있기 때문에 True를 반환한다. 반면에 “zzz”는 구성원에 포함되어 있지 않으므로 False를 반환한다. not in 연산자는 in 연산자와 반대이므로 “zzz”가 구성원에 포함되어 있지 않기 때문에 True를 반환한다.
구성원 연산자는 시퀀스 타입에서도 사용 가능하다. 리스트 객체인 myList에 10이라는 값이 있으므로 예제 코드 결과는 True를 반환한다. 반면에 100은 없으므로 False를 반환한다.
사전 타입에서는 주의할 점이 있다. 바로 Key에 대해서만 판단 가능하다는 점이다. Key와 연결되는 값에 대해서는 판단 불가능하다.
식별 연산자
연산자 | 설명 |
is | 객체가 같다. |
not is | 객체가 틀리다. |
a = 10
b = 10
print(a is b)
print(id(a))
print(id(b))
#결과
True
140728148796080
140728148796080
예제 코드의 경우 파이썬은 10이라는 정수 객체를 a와 b가 둘 다 동일한 객체를 참조하는 것으로 해석된다. 또한 파이썬 내장 함수 중 하나인 id를 사용하면 참조형 객체의 주소를 확인할 수 있다. 그리고 둘 다 동일한 것도 확인 가능하다.
a = 10
b = 10
b = 100
print(a is b)
print(id(a))
print(id(b))
#결과
False
140728148796080
140728148798960
두 번째 예제 코드의 결과는 당연히 False이다. 파이썬은 참조계수 기법을 사용하기 때문에, 처음에 b가 10을 참조할 때는 같은 객체를 참조하지만(참조 계수가 2가 된다) b가 100을 참조하는 순간 객체 10의 참조 계수는 2에서 1로 줄어들고 b와의 연결이 끊어진다. 그리고 객체 100의 참조 계수가 1로 증가한다. 따라서 a와 b는 가리키는 객체가 달라지므로 False가 된다. 참고로, 객체의 참조 계수가 0이 되는 순간 객체는 소멸한다.
'언어 > Python' 카테고리의 다른 글
[Python] Python(파이썬) 반복문(for, while)/range/축약형 문법 (0) | 2020.04.01 |
---|---|
[Python] Python(파이썬) shallow copy(얕은 복사) 그리고 deep copy(깊은 복사) (0) | 2020.03.31 |
[Python] Python(파이썬) 관계/논리/비트 연산자 (0) | 2020.03.30 |
[Python] Python(파이썬) 데이터 분석을 위한 Excel(엑셀) 활용 (1) (0) | 2020.03.28 |
[Python] Python(파이썬) 연산자 개요 및 산술 연산자 (0) | 2020.03.28 |