본문 바로가기
Language/Python

[Python] is, == , id() / 예제로 공부하는 Python 100 문제풀이

by 애기 개발자 2021. 12. 30.
반응형

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' 의 사용에 대해 이해하기 쉽다.

3 is, is연산자.py

 

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의 주소값이 같은것을 확인할 수 있다.

 

타 언어와는 다르게 변수가 메모리에 할당되는 것이 아닌, 값이 메모리에 할당된 채로 변수 명은 그대로 메모리 주소를 가리킬 뿐인듯한 느낌이 든다.

4 변수, id, id함수.py

 

우리가 다른 언어에서 비교하기위해서라도 가장 많이 사용하는 == 과의 차이를 알기위해 아래의 코드를 보자면

 

#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 의 결과가 나온다.

5 is, == 연산자.py

 

마지막으로 변수에 값 변형을 준 예시를 보면

 

#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한 값은 앞의 리스트와 비슷한 맥락으로 새로운 주소에 값이 할당된다고 한다.

6 is, 연산자, 결과, print.py

 

반응형

댓글