소개
Python 의 is 연산자는 두 변수가 메모리 상에서 동일한 객체를 참조하는지 확인하는 데 사용됩니다. 이는 두 변수가 동일한 값을 갖는지 확인하는 == 연산자와는 다릅니다. 이 랩에서는 is 연산자가 어떻게 작동하는지, 그리고 Python 프로그래밍에서 어떻게 유용하게 사용될 수 있는지 살펴보겠습니다. 이는 특히 리스트나 딕셔너리 같은 가변 객체 (mutable objects) 를 다룰 때 이해해야 할 중요한 개념입니다. 이 랩에서는 간단하고 복잡한 예제를 통해 Python 에서 is 연산자의 사용법을 살펴보고, 효율적이고 신뢰할 수 있는 코드를 작성하는 데 어떻게 활용될 수 있는지 알아보겠습니다.
기본 사용법
이 단계에서는 is 연산자의 가장 기본적인 사용법부터 시작합니다.
- 터미널에서 Python 인터프리터를 엽니다.
python3
- 두 변수
a와b를 정의하고, 두 변수에 동일한 값을 할당합니다.
a = "Hello"
b = "Hello"
id()함수를 사용하여a와b의 메모리 주소를 출력합니다.
print(id(a))
print(id(b))
is연산자를 사용하여a와b가 동일한 객체를 참조하는지 확인합니다.
print(a is b)
위 코드의 출력 결과는 True여야 합니다. 왜냐하면 a와 b가 메모리 상에서 동일한 객체를 참조하기 때문입니다.
불변 객체 (Immutable) vs 가변 객체 (Mutable)
이 단계에서는 is 연산자가 불변 객체와 가변 객체에서 어떻게 동작하는지 살펴보겠습니다.
- 두 변수
c와d를 정의하고, 둘 다 빈 리스트[]를 할당합니다.
c = []
d = []
id()함수를 사용하여c와d의 메모리 주소를 출력합니다.
print(id(c))
print(id(d))
is연산자를 사용하여c와d가 동일한 객체를 참조하는지 확인합니다.
print(c is d)
위 코드의 출력 결과는 False여야 합니다. 왜냐하면 c와 d는 가변 객체이며, 메모리 상에서 동일한 객체가 아니기 때문입니다.
- 이제 두 변수
e와f를 정의하고, 둘 다 정수 값을 할당합니다.
e = 10
f = 10
id()함수를 사용하여e와f의 메모리 주소를 출력합니다.
print(id(e))
print(id(f))
is연산자를 사용하여e와f가 동일한 객체를 참조하는지 확인합니다.
print(e is f)
위 코드의 출력 결과는 True여야 합니다. 왜냐하면 e와 f는 불변 객체이며, 메모리 상에서 동일한 객체를 공유하기 때문입니다.
함수 매개변수
이 단계에서는 is 연산자를 함수 매개변수와 함께 사용하는 방법을 살펴보겠습니다.
- 두 개의 매개변수
x와y를 받는 함수my_function()을 정의합니다.
def my_function(x, y):
print(x is y)
my_function()함수를 두 번 호출합니다. 한 번은 불변 객체로, 한 번은 가변 객체로 호출합니다.
my_function(10, 10)
my_function([], [])
첫 번째 호출의 출력 결과는 True여야 하고, 두 번째 호출의 출력 결과는 False여야 합니다.
고급 사용법
이 단계에서는 is 연산자의 몇 가지 고급 사용법을 살펴보겠습니다.
value속성을 가진 클래스MyClass를 정의합니다.
class MyClass:
def __init__(self, value):
self.value = value
- 동일한
value를 가진MyClass클래스의 두 인스턴스obj1과obj2를 정의합니다.
obj1 = MyClass("Hello")
obj2 = MyClass("Hello")
id()함수를 사용하여obj1.value와obj2.value의 메모리 주소를 출력합니다.
print(id(obj1.value))
print(id(obj2.value))
is연산자를 사용하여obj1.value와obj2.value가 동일한 객체를 참조하는지 확인합니다.
print(obj1.value is obj2.value)
위 코드의 출력 결과는 True여야 합니다. 왜냐하면 value 속성은 불변 객체이며, 두 인스턴스가 메모리 상에서 동일한 객체를 공유하기 때문입니다.
- 이제 가변 객체를
value로 사용하는MyClass클래스의 두 인스턴스obj3과obj4를 정의합니다.
obj3 = MyClass([])
obj4 = MyClass([])
id()함수를 사용하여obj3.value와obj4.value의 메모리 주소를 출력합니다.
print(id(obj3.value))
print(id(obj4.value))
is연산자를 사용하여obj3.value와obj4.value가 동일한 객체를 참조하는지 확인합니다.
print(obj3.value is obj4.value)
위 코드의 출력 결과는 False여야 합니다. 왜냐하면 value 속성은 가변 객체이며, 두 인스턴스가 메모리 상에서 동일한 객체를 공유하지 않기 때문입니다.
요약
이 랩에서는 Python 의 is 연산자에 대해 배우고, 두 변수가 메모리에서 동일한 객체를 참조하는지 확인하는 방법을 익혔습니다. 불변 객체와 가변 객체, 함수 매개변수, 그리고 클래스 인스턴스에서 is 연산자의 동작을 살펴보았습니다. is 연산자를 이해함으로써, 우리는 더 효율적이고 신뢰할 수 있는 Python 코드를 작성할 수 있습니다.



