객체와 레퍼런스의 특이한 경우

책에 있는 연습 문제를 풀다가 특이한 경우를 발견했다.

일반적으로 수치형 자료와 문자열에서는 같은 값을 다른 변수에 선언 하게 되면 같은 주소를 갖게 된다.

예를 들어
>>> a = 1
>>> b = 1
>>> a is b
Ture
이다.

그런데 특이하게도 수치형에서 값이 -6 이하가 되면 위 경우에서 False 가 된다.
>>> a = -6
>>> b = -6
>>> a is b
False
이다.

원인은 자세히 모르겠지만 조금 희한하다....

// 2012.11.16 추가
지식이 쌓인 후에야 알게 되어 적는다.

Python Language Reference에서 Data Model을 보면 Mutable 객체와 Immutable 객체의 레퍼런스에 대해서 아래와 같이 다룬다.

Immutable 타입에 대해서, 새 값을 계산하는 연산(Operation)은 같은 타입과 값을 가지고 있는 존재하는 객체의 레퍼런스를 리턴할 수도 있다. 그러나 Mutable 객체에 대해서는 허가되지 않는다.

예를 들면, a = 1; b = 1이 있을 때 이 두 객체의 값은 모두 1을 가지지만 구현에 따라서 같은 객체를 가리키지 않을 수 있다. (a is b가 False 또는 True일 수 있다.)

그러나 c = []; d = []의 경우 두 객체는 완전히 다른 것이라고 보장된다. 다만, c = d = [] 과 같이 사용하면 같은 객체이다.

댓글 없음:

댓글 쓰기