본문 바로가기
programming/Python

파이썬 id 연산자 is not 동일한 메모리 위치를 가진 객체 비교

by 개코 - 개발과 코딩 2021. 8. 4.

파이썬의 id 연산자는 조금 특이한데 값이 같은지 여부가 아닌 동일한 메모리 위치를 가진 객체인지를 비교하고 판단한다. 단지 객체의 값이 같은지 여부는 비교 연산자를 사용해도 되지만 동일한 메모리 위치까지 비교하는 민감한 경우에 사용한다.

파이썬 ID연산자
파이썬 ID연산자

 

id 연산자 is, is not

동일한 메모리 위치에 있는 객체인지 여부를 판단하는 것은 is 또는 is not 연산자를 사용한다.

is 는 동일한 메모리 위치에 있는 객체라면 참을 반환하고
is not 은 반대의 값을 반환한다.

 

코드샘플

id 연산자를 사용했을 때와 비교연산자를 사용했을 때의 결과는 다르다.

단순히 값이 같음을 비교하는 비교연산자는 참을 반환하겠지만, 동일한 메모리 위치의 객체인지 여부까지 판단한다면 거짓을 반환한다.

vVal_1 = ["파이썬", "머신러닝"]
vVal_2 = ["파이썬", "머신러닝"]

vVal = ( vVal_1 is vVal_2 )
print( "vVal_1 is vVal_2 - ", vVal, type(vVal))

vVal = ( vVal_1 == vVal_2 )
print( "vVal_1 is vVal_2 - ", vVal, type(vVal))

vVal_3 = vVal_1
vVal = ( vVal_1 is vVal_3 )
print( "vVal_1 is vVal_3 - ", vVal, type(vVal))

vVal_1[0] = "car"
vVal = ( vVal_1 is vVal_3 )
print( "vVal_1 - ", vVal_1, type(vVal_1))
print( "vVal_3 - ", vVal_3, type(vVal_3))
print( "vVal_1 is vVal_3 - ", vVal, type(vVal))

결과화면을 보자.

변수 두 개의 값은 같다. 단순 비교 연산을 한다면 참을 반환한다.

하지만 메모리 위치는 다르기 때문에 거짓을 반환하는 것에 유의한다.

새로운 변수에 기존의 값을 할당하여 id 연산을 했을 경우는 참을 반환하기 때문에 동일한 메모리 위치의 객체임을 알 수 있다.

이것은 변수 vVal_1 의 일부 값을 변경하면 vVal_3 의 값도 같이 변경된다는 것을 알 수 있기도 하다.

다르게 보면 변수 사용에 주의가 필요할 수도 있다

 

코드 샘플

위의 비교 연산자에 not 만 붙여 주었다.

is not 의 동작은 is 와 반대임을 알 수 있다.

다른 메모리 공간의 객체라면 참을 반환한다.

is 연산자를 사용했을 때와 반대의 결과를 반환한다는 점만 생각하면 된다.

vVal_1 = ["파이썬", "머신러닝"]
vVal_2 = ["파이썬", "머신러닝"]

vVal = ( vVal_1 is not vVal_2 )
print( "vVal_1 is vVal_2 - ", vVal, type(vVal))

vVal = ( vVal_1 == vVal_2 )
print( "vVal_1 is vVal_2 - ", vVal, type(vVal))

vVal_3 = vVal_1
vVal = ( vVal_1 is not vVal_3 )
print( "vVal_1 is vVal_3 - ", vVal, type(vVal))

vVal_1[0] = "car"
vVal = ( vVal_1 is not vVal_3 )
print( "vVal_1 - ", vVal_1, type(vVal_1))
print( "vVal_3 - ", vVal_3, type(vVal_3))
print( "vVal_1 is vVal_3 - ", vVal, type(vVal))

결과화면을 봐도 위의 첫번째 결과와 정반대의 결과를 나타낸다.

반응형

댓글