반응형
is - 비교하고 싶은 두 변수의 메모리 주소값이 같은지 확인
== - 비교하고 싶은 두 변수의 값이 같은지 확인
#is, is연산자
a = [1, 2, 3, 4, 5]
b = a
c = [1, 2, 3, 4, 5]
print('a is b = ', a is b)
print('a is c = ', a is c)
'''
a is b = True
a is c = False
'''
위의 값을 확인해 보면 이해하기 'is' 의 사용에 대해 이해하기 쉽다.
id() 함수는 구하고자 하는 변수의 주소값을 확인 할 수 있다.
#id, id함수
a = 1
print(a, ' - ', id(a))
b = a
print(b, ' - ', id(b))
a = 2
print(a, ' - ', id(a))
'''
1 - 140735643104080
1 - 140735643104080
2 - 140735643104112
'''
보면 b=a를 하면서 a와 b의 주소값이 같은것을 확인할 수 있다.
타 언어와는 다르게 변수가 메모리에 할당되는 것이 아닌, 값이 메모리에 할당된 채로 변수 명은 그대로 메모리 주소를 가리킬 뿐인듯한 느낌이 든다.
우리가 다른 언어에서 비교하기위해서라도 가장 많이 사용하는 == 과의 차이를 알기위해 아래의 코드를 보자면
#is, == 연산자
a = 101
b = 100+1
print(a is b) #True
print(a == b) #True
c = 'korea'
d = 'korea'
print(c is d) #True
print(c == d) #True
e = [1,2,3,4,5]
f = [1,2,3,4,5]
print(e is f) #False
print(e == f) #True
난 처음에 F,T,F,T,T,T 로 예상을 했었다.
하지만 파이썬은 내 생각과 달랐고 앞서 말했듯 값이 메모리에 있고 변수명은 그저 가리킬 뿐이었다.
101과 100+1의 주소값은 동일했고, 문자열도 예외는 아니였다.
하지만 [ ] 로 묶인 리스트는 아예 다른 주소를 처음부터 할당 받는다고 한다. 그래서 T,T,T,T,F,T 의 결과가 나온다.
마지막으로 변수에 값 변형을 준 예시를 보면
#is, 연산자, 결과, print
a = "korea"
b = "korea"
print('a is b - ', a is b)
b += "!"
print('a is b - ', a is b)
c = b[:-1] #slice
print(c)
print('a is c - ', a is c)
우선
첫번째 a is b는 당연히 True,
두번째 a is b는 당연히 False 이다.
하지만 c = b[:-1]을 통해
b의 korea! 에서 !를 제거당해 c = 'korea' 가 되었다.
그래서 a is c 는 True 일 것이라 예상했으나 정답은 False였다.
slice한 값은 앞의 리스트와 비슷한 맥락으로 새로운 주소에 값이 할당된다고 한다.
반응형
'Language > Python' 카테고리의 다른 글
[Python] for 반복문 / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.01.14 |
---|---|
[Python] 연산자, in(멤버쉽) 연산자, bool / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.01.10 |
[Python] 아스키 코드, Ascii Code / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.01.10 |
[Python] 자료형, list, tuple, set, dict / 예제로 공부하는 Python 100 문제풀이 (0) | 2022.01.04 |
[Python] VS Code에 Python 설치하기 (0) | 2021.12.20 |
댓글