파이썬에서 'is' 연산자란 무엇인가?
파이썬에는 is와 is not이라는 두 가지 정체성 연산자(Identity Operator)가 있습니다. 이 연산자들은 두 객체가 메모리상에서 실제로 같은 객체인지를 판별하는 데 사용됩니다.
파이썬 인터프리터는 컴퓨터 메모리에 존재하는 모든 객체마다 고유한 식별 번호, 즉 id를 부여합니다. 이 값은 내장 함수 id()를 통해 확인할 수 있으며, 일반적으로 객체가 위치한 메모리 주소를 나타냅니다.
'is' 연산자의 동작 방식
정체성 연산자는 두 객체의 id() 값을 비교합니다.
- 두 객체의 id 값이 같으면 →
is는True를 반환 - 두 객체의 id 값이 다르면 →
is는False를 반환
즉, is는 단순히 값이 같은지가 아니라, 두 이름이 메모리상의 동일한 객체를 가리키고 있는지를 검사하는 것입니다.
예제 코드
>>> a = 10 >>> b = a >>> id(a), id(b) (490067904, 490067904) >>> a is b True
위 예제에서 b = a는 새로운 객체를 만드는 것이 아니라, 변수 b가 변수 a와 같은 객체를 참조하도록 합니다. 따라서 두 변수의 id 값이 동일하며, a is b의 결과는 True입니다.
>>> a = 10 >>> b = 20 >>> id(a), id(b) (490067904, 490068064) >>> a is b False
반면 위 예제에서는 a와 b가 서로 다른 값을 가지며, 각각 다른 메모리 위치에 저장된 별개의 객체입니다. 따라서 id 값이 다르고, a is b의 결과는 False입니다.
'is'와 '=='의 차이점
초보자들이 자주 혼동하는 부분 중 하나가 is와 비교 연산자 ==의 차이입니다.
==: 두 객체의 값(value)이 같은지 비교합니다.is: 두 객체의 정체성(identity), 즉 메모리상 동일한 객체인지 비교합니다.
값이 같아도 서로 다른 객체일 수 있으므로, ==가 True라 해도 is가 반드시 True인 것은 아닙니다. 객체의 동일성을 확인해야 하는 특수한 경우가 아니라면, 일반적인 값 비교에는 ==를 사용하는 것이 바람직합니다.