Python ID 연산자란 무엇인가?
Python에서 모든 객체는 메모리에 저장되는 순간 고유한 식별 번호(identity number)를 부여받습니다. 이 식별 번호는 내장 함수인 id()를 통해 언제든지 확인할 수 있습니다.
Python에는 이러한 객체의 고유성을 비교하는 ID 연산자가 두 가지 있습니다. 바로 is와 is not입니다.
1. is 연산자
is 연산자는 두 객체의 id() 값을 비교합니다. 두 객체가 메모리상에서 동일한 위치, 즉 같은 객체를 가리키고 있다면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
2. is not 연산자
is not 연산자는 is의 반대 동작을 수행합니다. 두 객체의 id() 값이 같으면 False를, 다르면 True를 반환합니다.
ID 연산자의 실제 동작 예시
아래 인터프리터 실행 예제를 통해 두 연산자의 동작 방식을 직접 확인해 보겠습니다.
>>> a = 10 >>> b = a >>> id(a), id(b) (1581561184, 1581561184) >>> a is b True >>> a is not b False >>> a = 10 >>> b = 20 >>> id(a), id(b) (1581561184, 1581561504) >>> a is b False >>> a is not b True
첫 번째 예제에서 변수 b는 a를 그대로 할당받았기 때문에 두 변수는 동일한 객체를 참조하며, id() 값도 같습니다. 따라서 a is b는 True를 반환합니다.
반면 두 번째 예제에서 a와 b는 서로 다른 값을 가지므로 각각 다른 메모리 위치에 저장되고, id() 값도 다릅니다. 결과적으로 a is b는 False, a is not b는 True가 됩니다.
참고: == 연산자와 is 연산자의 차이
많은 초보자가 혼동하는 부분 중 하나는 == 연산자와 is 연산자의 차이입니다. ==는 두 객체의 값(value)이 같은지 비교하는 반면, is는 두 객체가 메모리상 동일한 객체인지, 즉 정체성(identity)을 비교합니다. 따라서 값이 같더라도 서로 다른 객체라면 is 연산의 결과는 False가 될 수 있습니다.