변수와 메모리 주소

PythonBeginner
지금 연습하기

소개

이 튜토리얼에서는 Python 변수, 메모리 주소, 그리고 가변 (mutable) 및 불변 (immutable) 데이터 타입의 차이점을 살펴보겠습니다.

  • 불변 데이터 타입 (Immutable data types): 생성 후 변경할 수 없는 데이터 타입입니다. 예시로는 int, float, str, tuple, 그리고 frozenset이 있습니다.
  • 가변 데이터 타입 (Mutable data types): 생성 후 수정할 수 있는 데이터 타입입니다. 예시로는 list, dict, 그리고 set이 있습니다.

불변 데이터 타입의 경우, 변경이 발생하면 새로운 객체가 생성되는 반면, 가변 데이터 타입은 제자리에서 수정될 수 있습니다. 이러한 구분을 이해하는 것은 메모리 주소와 변수 할당을 다룰 때 매우 중요합니다.

변수 할당, 가변 및 불변 데이터 타입의 특징, 그리고 메모리 주소를 비교하기 위한 is 연산자에 대해 다룰 것입니다. 시작해 봅시다!

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 86%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

변수 할당 및 메모리 주소

Python 에서 변수는 값이 저장된 메모리 위치에 대한 참조일 뿐입니다. 변수에 값을 할당하면 Python 은 (필요한 경우) 새로운 객체를 생성하고 해당 객체를 변수가 참조하도록 합니다.

먼저 Python 인터프리터를 엽니다:

python

예시를 살펴보겠습니다:

x = 10
y = x

이 예제에서 변수 x는 값 10을 할당받습니다. xy에 할당하면, 두 변수 모두 동일한 메모리 위치를 참조하게 됩니다. id() 함수를 사용하여 이를 확인할 수 있습니다:

print(id(x))  ## Output: memory address of x
print(id(y))  ## Output: memory address of y, which should be the same as x

is 연산자

Python 에서 is 연산자는 두 객체의 메모리 주소를 비교합니다. 메모리 주소가 같으면 is 연산자는 True를 반환하고, 그렇지 않으면 False를 반환합니다. 이는 객체의 값을 비교하는 == 연산자와는 다릅니다.

x = [1, 2, 3]
y = x
z = [1, 2, 3]

print(x is y)  ## Output: True (x and y have the same memory address)
print(x is z)  ## Output: False (x and z have different memory addresses)

메모리 주소 비교

이 단계에서는 동일한 값을 가진 변수의 메모리 주소를 비교해 보겠습니다.

아래 지침을 따르세요:

## Create two integer variables `a` and `b` with the same value.
a = 10
b = 10
## Create two list variables `c` and `d` with the same elements.
c = [1, 2, 3]
d = [1, 2, 3]

## Compare the memory addresses of `a` and `b`, as well as `c` and `d`.
print(a is b)  ## Output: True
print(c is d)  ## Output: False

위의 예제에서, 동일한 값을 가진 두 개의 정수 변수 ab를 생성했습니다.

또한 동일한 요소를 가진 두 개의 리스트 변수 cd를 생성했습니다.

ab의 메모리 주소를 비교했을 때, is 연산자는 True를 반환했습니다. 이는 ab가 동일한 메모리 주소를 공유하기 때문입니다.

하지만 cd의 메모리 주소를 비교했을 때, is 연산자는 False를 반환했습니다. 이는 cd가 서로 다른 메모리 주소를 가지고 있기 때문입니다.

그렇다면, 이것은 무엇을 의미할까요?

  1. 동일한 값을 가진 불변 데이터 타입은 동일한 메모리 주소를 가질 수 있습니다.
  2. 동일한 값을 가진 가변 데이터 타입은 서로 다른 메모리 주소를 가집니다.

가변 데이터 타입 수정

다음으로, 가변 데이터 타입을 생성하고 함께 수정해 보겠습니다.

## Create two variables `x` and `y` that reference the same list.
x = [1, 2, 3]
y = x

## Modify the list using variable `x`.
x.append(4)

## Observe the changes in variable `y`.
print(y)  ## Output: [1, 2, 3, 4] (y also reflects the changes because x and y share the same memory address)

이 예제에서, 동일한 리스트를 참조하는 두 개의 변수 xy를 생성했습니다.

변수 x를 사용하여 리스트를 수정했을 때, 변경 사항은 변수 y에도 반영되었습니다. 이는 xy가 동일한 메모리 주소를 공유하기 때문입니다.

불변 데이터 타입 수정

마지막으로, 불변 데이터 타입을 차례로 수정하는 작업을 함께 해보겠습니다.

## Create two variables `a` and `b` that reference the same string.
a = "hello"
b = a

## Modify the string using variable `a`.
a = a + ", world"

## Observe the changes in variable `b`.
print(b)  ## Output: "hello" (b doesn't change because a new object was created when modifying the string)

이 예제에서, 동일한 문자열을 참조하는 두 개의 변수 ab를 생성했습니다.

변수 a를 사용하여 문자열을 수정했을 때, 변경 사항은 변수 b에 반영되지 않았습니다. 이는 ab가 서로 다른 메모리 주소를 가지고 있기 때문입니다.

요약

이 고급 튜토리얼에서는 Python 변수와 메모리 주소에 대해 더 깊이 탐구했습니다. 변수 할당, 가변 및 불변 데이터 타입, 그리고 메모리 주소를 비교하기 위한 is 연산자에 대해 논의했습니다. 또한 실습을 통해 이러한 개념들을 연습했습니다. 이러한 고급 개념을 이해하면 Python 이 메모리를 관리하는 방식과 변수가 더 깊은 수준에서 어떻게 작동하는지에 대한 더 큰 통찰력을 얻을 수 있으므로, 더 능숙한 Python 프로그래머가 되는 데 도움이 될 것입니다.