질의응답 게시판
스타트 파이썬에 is연산자가 나오진 않지만 질문해봅니다.
a=[1,2,3]
b=a
이렇게 입력해주면
id(a) 가 id(b) 와 동일한 값을 가지게 되고
a is b 도 True 를 반환하는데
id(a) is id(b) 는 왜 False 를 반환할까요?
----------------------------------------------
라고 질문을 올리려는 순간 갑자기 어떤 생각이 들어서
id(id(a)) 를 입력해보고
id(id(b)) 를 입력해봤더니 다른 숫자가 출력되는걸 보고
뭔가 이상하다는 생각이 들어서 이것저것 생각나는 코드들을 쳐보니까
id(a) is id(a) 마저도 False 를 반환한다는걸 알아냈습니다.
그리고 type(id(a)) 로 id(a)는 정수형의 자료형이라는 사실을 알아냈고요
그다음엔 파이썬쉘에다가 id(id(a)) 를 계속 쳐봤는데 칠때마다
값이 달라지더라고요.
그렇다면 a = [1,2,3] 이라고 쳤을때 [1,2,3] 리스트가 생성되서 어떤 메모리주소에
저장되고
그 메모리주소를 나타내기위한 id(a)는 1582339961800 처럼 정수인데
호출될때마다 이 정수를 각기 다른 메모리에 저장하기 때문에
id(a)의 메모리 주소를 나타내는 id(id(a)) 값은 계속 바뀌는 것인가? 라는 생각이 들면서 또 이것저것 쳐봤는데
>>> a=[1,2,3]
>>> id(a)
1582839961800
>>> a=[1,2,3]
>>> id(a)
1582839961032
>>> a=[1,2,3]
>>> id(a)
1582839961672
이거처럼 a에 [1,2,3]이라는 리스트를 저장할때마다 id 값이 바뀌는데
>>> a=123
>>> id(a)
140714226401936
>>> a=123
>>> id(a)
140714226401936
>>> a=123
>>> id(a)
140714226401936
a에 123이라는 정수를 저장할때는 계속해도 id값이 그대로네요
대체 왜 이런 차이가 나오는 건가요?
이쯤 오니까 내가 뭘 모르는지 모르겠다는 생각이 들고
미로에 갇혀서 헤매는 거 같은 느낌도 들고
사실 이 미로는 출구같은건 없고 귀도반로섬씨만 아는 비밀번호를 외쳐야만
탈출할수있는 닫힌 미로인 것인가 라는 생각도 들어서
이만 의식의 흐름대로 작성한 질문을 마치겟습니다.