• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

다른 변수에 같은 값을 집어넣으면 오브젝트의 값은 같아야하자나요 근데 이게 이상해요

21.01.23 22:19 작성 조회수 158

0

이때는 id 값이 같다고 뜨는데 이때는 다르다고 뜨네요 그 이유가 뭘까요?

변수에 좀 더 큰 값을 넣어서도 해봤는데 그때도 다르다고 떳는데 클 수록 id값을 달라지는 느낌이네요

답변 4

·

답변을 작성해보세요.

1

와 정말 어려운 부분에 대해서 궁금하셨군요.

이건 CPYTHON 영역까지 생각해 봐야 하는 부분입니다.

안보이면 드래그 해서 보세요!

>>> a = 256
>>> b = 256
>>> id(a)
9987148
>>> id(b)
9987148
>>> a = 257
>>> b = 257
>>> id(a)
11662816
>>> id(b)
11662828

위에 예제도 똑같습니다.

공식 설명은 아래와 같고 결론은

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)


-5 ~ 256 값의 배열을 유지합니다 이때는 같은 ID 값
해당 범위에서 새로운 값을 변경하면 이때는 새로운 참조 값이 할당됩니다.
그래서 ID 값이 변경됩니다.
즉, 파이썬 내부에서 자동으로 재 할당이 이루어 집니다.

공식 레퍼런스 입니다.
지금 입문과정에서 완벽하게 이해하는 것은 힘들 수 있어요.
파이썬2 공식 버전부터 읽어봐야 하는 내용이라서요.

https://docs.python.org/2/c-api/int.html

0

맞습니다. 재 할당 됩니다.

0

PARK JUNYEONG님의 프로필

PARK JUNYEONG

2021.01.24

-5 ~ 256까지는 값의 배열이 유지가 되고 그래서 id를 비교를 하면 True로 출력이 된거였네요

그럼, 그 이상의 값은 배열이 유지가 안되어서 id를 비교해도 비교가 안되는거네요?

0

PARK JUNYEONG님의 프로필

PARK JUNYEONG

2021.01.24

저도 이 부분이 궁금하네요!