Python is 연산자

PythonBeginner
지금 연습하기

소개

Python 의 is 연산자는 두 변수가 메모리 상에서 동일한 객체를 참조하는지 확인하는 데 사용됩니다. 이는 두 변수가 동일한 값을 갖는지 확인하는 == 연산자와는 다릅니다. 이 랩에서는 is 연산자가 어떻게 작동하는지, 그리고 Python 프로그래밍에서 어떻게 유용하게 사용될 수 있는지 살펴보겠습니다. 이는 특히 리스트나 딕셔너리 같은 가변 객체 (mutable objects) 를 다룰 때 이해해야 할 중요한 개념입니다. 이 랩에서는 간단하고 복잡한 예제를 통해 Python 에서 is 연산자의 사용법을 살펴보고, 효율적이고 신뢰할 수 있는 코드를 작성하는 데 어떻게 활용될 수 있는지 알아보겠습니다.

기본 사용법

이 단계에서는 is 연산자의 가장 기본적인 사용법부터 시작합니다.

  1. 터미널에서 Python 인터프리터를 엽니다.
python3
  1. 두 변수 ab를 정의하고, 두 변수에 동일한 값을 할당합니다.
a = "Hello"
b = "Hello"
  1. id() 함수를 사용하여 ab의 메모리 주소를 출력합니다.
print(id(a))
print(id(b))
  1. is 연산자를 사용하여 ab가 동일한 객체를 참조하는지 확인합니다.
print(a is b)

위 코드의 출력 결과는 True여야 합니다. 왜냐하면 ab가 메모리 상에서 동일한 객체를 참조하기 때문입니다.

불변 객체 (Immutable) vs 가변 객체 (Mutable)

이 단계에서는 is 연산자가 불변 객체와 가변 객체에서 어떻게 동작하는지 살펴보겠습니다.

  1. 두 변수 cd를 정의하고, 둘 다 빈 리스트 []를 할당합니다.
c = []
d = []
  1. id() 함수를 사용하여 cd의 메모리 주소를 출력합니다.
print(id(c))
print(id(d))
  1. is 연산자를 사용하여 cd가 동일한 객체를 참조하는지 확인합니다.
print(c is d)

위 코드의 출력 결과는 False여야 합니다. 왜냐하면 cd는 가변 객체이며, 메모리 상에서 동일한 객체가 아니기 때문입니다.

  1. 이제 두 변수 ef를 정의하고, 둘 다 정수 값을 할당합니다.
e = 10
f = 10
  1. id() 함수를 사용하여 ef의 메모리 주소를 출력합니다.
print(id(e))
print(id(f))
  1. is 연산자를 사용하여 ef가 동일한 객체를 참조하는지 확인합니다.
print(e is f)

위 코드의 출력 결과는 True여야 합니다. 왜냐하면 ef는 불변 객체이며, 메모리 상에서 동일한 객체를 공유하기 때문입니다.

함수 매개변수

이 단계에서는 is 연산자를 함수 매개변수와 함께 사용하는 방법을 살펴보겠습니다.

  1. 두 개의 매개변수 xy를 받는 함수 my_function()을 정의합니다.
def my_function(x, y):
    print(x is y)
  1. my_function() 함수를 두 번 호출합니다. 한 번은 불변 객체로, 한 번은 가변 객체로 호출합니다.
my_function(10, 10)
my_function([], [])

첫 번째 호출의 출력 결과는 True여야 하고, 두 번째 호출의 출력 결과는 False여야 합니다.

고급 사용법

이 단계에서는 is 연산자의 몇 가지 고급 사용법을 살펴보겠습니다.

  1. value 속성을 가진 클래스 MyClass를 정의합니다.
class MyClass:
    def __init__(self, value):
        self.value = value
  1. 동일한 value를 가진 MyClass 클래스의 두 인스턴스 obj1obj2를 정의합니다.
obj1 = MyClass("Hello")
obj2 = MyClass("Hello")
  1. id() 함수를 사용하여 obj1.valueobj2.value의 메모리 주소를 출력합니다.
print(id(obj1.value))
print(id(obj2.value))
  1. is 연산자를 사용하여 obj1.valueobj2.value가 동일한 객체를 참조하는지 확인합니다.
print(obj1.value is obj2.value)

위 코드의 출력 결과는 True여야 합니다. 왜냐하면 value 속성은 불변 객체이며, 두 인스턴스가 메모리 상에서 동일한 객체를 공유하기 때문입니다.

  1. 이제 가변 객체를 value로 사용하는 MyClass 클래스의 두 인스턴스 obj3obj4를 정의합니다.
obj3 = MyClass([])
obj4 = MyClass([])
  1. id() 함수를 사용하여 obj3.valueobj4.value의 메모리 주소를 출력합니다.
print(id(obj3.value))
print(id(obj4.value))
  1. is 연산자를 사용하여 obj3.valueobj4.value가 동일한 객체를 참조하는지 확인합니다.
print(obj3.value is obj4.value)

위 코드의 출력 결과는 False여야 합니다. 왜냐하면 value 속성은 가변 객체이며, 두 인스턴스가 메모리 상에서 동일한 객체를 공유하지 않기 때문입니다.

요약

이 랩에서는 Python 의 is 연산자에 대해 배우고, 두 변수가 메모리에서 동일한 객체를 참조하는지 확인하는 방법을 익혔습니다. 불변 객체와 가변 객체, 함수 매개변수, 그리고 클래스 인스턴스에서 is 연산자의 동작을 살펴보았습니다. is 연산자를 이해함으로써, 우리는 더 효율적이고 신뢰할 수 있는 Python 코드를 작성할 수 있습니다.