==가 갖고 있는 값이 같다는 의미라면, is는 존재가 같냐는 것이다.
리스트
# 같은 요소를 갖는 리스트 선언
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = x
# 변수 값 확인
print('x =', x) # x = [1, 2, 3, 4, 5]
print('y =', y) # y = [1, 2, 3, 4, 5]
print('z =', z) # z = [1, 2, 3, 4, 5]
x, y, z 변수를 가진 세 리스트에 대해서, 세 변수가 갖고 있는 값은 같다.
# 값이 같은가?
print(x == y) # True
print(x == z) # True
둘다 True이므로, 같은 값을 가지고 있다.
# 같은 객체인가? 존재가 같나?
print(x is y) # False
print(x is z) # True
존재가 같냐고 물어보면 아니다.
x = [1, 2, 3, 4, 5]라면, x라는 변수가 메모리에서 어떤 값을 갖게 된 것이다.
그렇다면 y = [1, 2, 3, 4, 5]일 때, y라는 변수도 메모리에서 이런 값을 갖게 되었다고 볼 수 있다.
한편, z = x라고 해주었으므로 z와 x는 같은 객체이다. 존재 자체가 같게 되어버린 것이다.
이는 메모리 공간에서 같은 데이터를 바라보고 있다는 의미로 받아들일 수 있다.
따라서 x를 바꿔버리면 z도 바꿔지게 된다.
x[0] = 100
print(x) # [100, 2, 3, 4, 5]
print(y) # [1, 2, 3, 4, 5]
print(z) # [100, 2, 3, 4, 5]
위를 통해 x와 z는 같은 존재임이 증명되었다고 볼 수 있다.
정수형
a = 3
b = 3
print(a == b) # True
print(a is b) # True
# 했을 때 둘 다 True가 나오는 이유는 무엇인가?
정수형은 리스트와 다르다. 아까는 리스트일 때 적용되는 말이다.
파이썬에서 모든 값은 객체이다.
우선, 정수 a가 3이라고 했다. 그러면 a는 3이라는 값을 가리키게 될 것이다.
한편, b에다가는 3을 대입했다. 그러면 정수는 b도 얘(3)를 바라보게 된다.
즉, 메모리 공간에 3이라는 게 있어서 a도 그걸 바라보고 b도 그걸 바라보고 있는 것이다.
실수형
a = 3.9
b = 3.9
print(a == b) # True
print(a is b) # False
# 했을 때 실수는 또 다르다.
이 코드에서 a == b는 True를 출력하고, a is b는 False를 출력하는 이유는 파이썬에서 == 연산자와 is 연산자가 서로 다른 목적을 가지고 있기 때문이다.
1. `a == b`
== 연산자의 경우, 값의 동등성을 비교한다. 즉, a와 b가 같은 값을 가지고 있는지를 확인한다.
이 경우, a와 b는 모두 3.9라는 동일한 값을 가지므로 a == b는 True를 출력한다.
2. `a is b`
is 연산자의 경우, 객체의 정체성을 비교한다. 즉, a와 b가 메모리에서 동일한 객체를 참조하고 있는지를 확인한다.
3.9와 같은 실수는 파이썬 내부에서 객체로 처리되는데, 실수는 자주 사용하는 수치 범위에 대해서는 메모리에서 같은 객체를 참조할 수 있지만, 모든 실수가 같은 객체를 참조하는 것은 아니다.
즉, a와 b는 같은 값 3.9를 가지지만, 이 두 변수는 메모리의 서로 다른 위치에 저장될 수 있다. 따라서 a is b는 False를 반환하게 된다.
> `실수의 메모리 관리`
파이썬에서는 작은 정수와 짧은 문자열은 객체 풀(object pool)에서 관리되어, 같은 값에 대해 동일한 객체를 재사용하게 된다. 그러나 실수와 같은 부동 소수점 숫자들은 이런 객체 풀 관리의 범위에 포함되지 않아서, 각 실수가 독립적인 객체로 취급될 수 있다.
'데이터 분석 > 파이썬 기초' 카테고리의 다른 글
리스트, 튜플, 집합, 딕셔너리에 대해서 알아보자. (3) | 2024.09.15 |
---|---|
문자열 자료형에 대해 이해해보자. (1) | 2024.09.11 |
연산자와 기본 자료형에 대해 알아보자. (0) | 2024.09.09 |
[2일차] 07. 제어문 (0) | 2024.09.05 |
04, 05, 06. 튜플, 집합, 딕셔너리 자료형 (0) | 2024.09.05 |