일반적으로 수치형 자료와 문자열에서는 같은 값을 다른 변수에 선언 하게 되면 같은 주소를 갖게 된다.
예를 들어
>>> 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 = [] 과 같이 사용하면 같은 객체이다.
댓글 없음:
댓글 쓰기