값 비교 시 is 연산자를 쓰면 안되는 이유

2023. 12. 29. 17:56·프로그래밍 언어/Python

is 연산자는 두 값이 같은지를 비교하는 것이 아닙니다. 두 객체가 메모리 상 동일한 주소에 저장되어 있는지를 비교합니다.

그렇기 때문에 두 값을 비교할 때는 반드시 is 연산자가 아닌 == 연산자를 사용해야 합니다.

 

is 연산자는 어떻게 동작하는지 직접 코드를 작성하며 알아봤습니다.

a = 1000
b = 1000
# 값이 같은지 비교
print(a == b)
# 메모리 상에 각각 변수 a, b 에 저장된 값이 저장된 위치
print(id(a), id(b))
# 메모리 상 동일한 주소에 저장되어 있는지 비교
print(a is b)

# 출력 결과
True
134878452576752 134878452577488
False

 

 

참고) 파이썬에서 정수 256 까지는 이미 해당 값이 메모리 상에 존재하면 기존의 객체를 재활용한다고 합니다.

예를 들어, 이미 5라는 값이 할당되어 메모리 상에 존재하면 이후 5라는 값을 다른 변수에 할당할 경우 5라는 값을 저장할 공간을 새로 마련하지 않고 기존에 존재하는 5라는 값이 할당된 주소값을 참조합니다.

a = 5
b = 5
# 파이썬에서 정수 256까지에 대해서는 이미 해당 값이 메모리 상에 존재하면 기존의 객체를 바인딩한다.
# 이는 동일 값을 메모리에 여러번 할당함으로써 발생하는 메모리 낭비를 줄이기 위함이다.
print(id(a), id(b))
print(a == b)
print(a is b)

# 출력 결과
134878948606256 134878948606256 # 5라는 값에 대해 주소값 동일
True
True

출처

https://wikidocs.net/91522 

https://papari1123.github.io/python/Python_variable/ 

'프로그래밍 언어 > Python' 카테고리의 다른 글

map 함수를 사용 후 중괄호([])로 접근할 때  (0) 2024.01.04
얕은 복사와 깊은 복사  (1) 2024.01.04
'프로그래밍 언어/Python' 카테고리의 다른 글
  • map 함수를 사용 후 중괄호([])로 접근할 때
  • 얕은 복사와 깊은 복사
devron
devron
개발자 Ron이 AI 트렌드, 바이브코딩, 직장인 AI 활용법을 실험하고 기록하는 공간입니다.
  • devron
    Ron on AI
    devron
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • k8s (1)
      • AWS (1)
      • 리눅스 (4)
      • Docker (8)
      • 라이브러리 & 프레임워크 (14)
        • React (2)
        • NestJS (8)
        • Spring (0)
        • Django (3)
        • FastAPI (1)
      • 웹 (2)
        • Nginx (1)
      • 프로그래밍 언어 (29)
        • HTML (0)
        • CSS (0)
        • JavaScript (21)
        • Python (3)
        • Node.js (0)
        • TypeScript (4)
        • Java (1)
      • Today I learned (9)
      • 알고리즘 (9)
        • 백준 (0)
        • 프로그래머스 (8)
        • 개념 (1)
      • 티끌모아 태산 (5)
        • 하루에 영단어 하나씩 (5)
        • 독서 (0)
      • 시행착오 (3)
      • 데이터베이스 (2)
        • MySQL (0)
      • 컴퓨터 과학 (8)
        • 네트워크 (2)
        • 운영체제 (0)
        • 데이터베이스 (2)
        • 자료구조 (4)
      • 포트폴리오 (4)
        • JJINCAFE IN SEOUL (4)
        • CODEUNICORN (0)
      • 회고 (0)
      • CICD (1)
      • AI (0)
      • AI 트렌드 (7)
        • AI Agent (1)
        • AI 활용법 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    바이브코딩
    프로그래머스
    AI프롬프트
    mysql
    레벨2
    프롬프트엔지니어링
    모듈
    스택
    개발자
    리눅스
    FastAPI
    chatgpt활용
    컨테이너
    ai코딩
    자바스크립트
    생활코딩
    PlanMode
    배열
    javascript
    Kubernetes
    typeorm
    기초
    Linux
    nestjs
    Docker
    django
    네트워크
    typescript
    Til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
devron
값 비교 시 is 연산자를 쓰면 안되는 이유
상단으로

티스토리툴바