인프런 커뮤니티 질문&답변

jsynyesoo님의 프로필 이미지
jsynyesoo

작성한 질문수

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

파이썬 변수(2-2)

파이썬 (2-2) 같은 오브젝트 참조 관련해서 질문 드립니다.

작성

·

185

0

m=800, n=800으로 선언을 하고 id 넣고 출력을 해도 true가 아닌 false가 뜹니다. 왜이런 건가요?

또 수업에서와 같이 m=800의 객체의 고유값을 확인했는데 수업과 다른 숫자가 출력되는 이유도 궁금합니다.

답변 2

0

Python 3.9.0을 사용하고 있습니다. 이게 혹시 버전이 올라가면서 변경된 건 없을까요? iPython을 열고 입력해보면 두 변수의 참조 번호가 다르게 나옵니다(아래는 실행한 결과). 실행환경은 리눅스입니다.

joshua@blackwidow:~$ ipython
Python 3.9.0 (default, Oct 17 2020, 16:52:55) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.


In [1]: m = 800

In [2]: n = 800

In [3]: print(id(m))
140500560747056

In [4]: print(id(n))
14050056074689

In [5]: print(id(m), id(n))
140500560747056 140500560746896

In [6]: 

그래서 a=b=c는 혹시 id가 같지 않을까 해서 아래와 같이 해봤더니 이때에는 동일하게 나오네요.

joshua@blackwidow:~$ ipython
Python 3.9.0 (default, Oct 17 2020, 16:52:55) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: a = b = c = 700

In [2]: a is b
Out[2]: True

In [3]: a is c
Out[3]: True

In [4]: b is c
Out[4]: True

In [5]: d = 700

In [6]: a is d
Out[6]: False

In [7]: print('a: '+str(id(a)), 'b: '+str(id(b)), 'c: '+str(id(c)), 'd: '+str(id(d)), sep='\n')
a: 139701311787120
b: 139701311787120
c: 139701311787120
d: 139701311539856

In [8]: a = 701

In [9]: print('a: '+str(id(a)), 'b: '+str(id(b)), 'c: '+str(id(c)), 'd: '+str(id(d)), sep='\n')
a: 139701310301872
b: 139701311787120
c: 139701311787120
d: 139701311539856

0

파이썬 TA님의 프로필 이미지
파이썬 TA
지식공유자

안녕하세요.

혹시 m과 n의 id를 출력하기 전에 중간에 값이 변경되었는지 확인바랍니다.

초기에 같은 값으로 변수를 선언해도 중간에 값이 변경되면 id 값이 변합니다.

추가적으로, 객체의 고유값 id는 새 파일을 작성해서 출력할때마다 계속 변경됩니다.

그 이유는 id는 랜덤하게 지정되기 때문입니다.

감사합니다.

jsynyesoo님의 프로필 이미지
jsynyesoo

작성한 질문수

질문하기