python에서는 변수에 값을 할당하면 object를 생성해서 값을 해당 저장한 후 변수는 해당 object의 메모리 주소를 의미하는 id값을 가지게 된다.
1이라는 값을 가지고 있는 object(id 23282008)를 가리키는 변수를 도식화 하면 다음과 같다.
[Python - id(), object의 unique 값(memory address)를 보여주는 함수]
>>> a = 1 >>> id(a) 23282008
만약 같은 값을 가지게 된다면 같은 object를 가리키게 될 수도 있다.
>>> a = b = 100 >>> id(a) 23283616 >>> id(b) 23283616
위 경우는 서로 다른 변수 이름을 가진 a, b이지만 id 23283616 object를 동시에 가리키고 있다.
이 상태에서 a에 다른 값을 할당하면 아래와 같이 다른 object를 가리키게 된다.
>>> a = 50 >>> id(a) 23282824 >>> id(b) 23283616 >>> print a, b 50 100
주의해야 할 점
이와 같이 변수가 동작하는 상황에서 주의해야 할 점이 하나 있는데, 같은 값을 가졌다고 해서 모두 동일한 object를 가리키는 것은 아니라는 것이다. (물론 같은 값을 가질 수도 있다.
>>> a = 12345 >>> b = 12345 >>> id(a) 23564368 >>> id(b) 23564584
>>> a = 1 >>> b = 1 >>> id(a) 23282008 >>> id(b) 23282008
위와 같이 같은 object 를 가리킬 수도 가리키지 않을 수도 있다.
(-5 ~256 사이의 숫자들은 미리 메모리에 할당되어 있고, 항상 동일 id 를 가지고 있다. )
[Python - 숫자 (Numbers) > 4. 미리 메모리에 할당되어진 숫자들]
따라서 두 변수를 비교해야 할 경우 해당 값을 비교하는 것인지 아니면 해당 변수가 가리키는 object의 id를 비교하는 것인지 명확히 해야할 필요가 있다.
>>> a = 12345 >>> b = 12345 >>> id(a) 23564368 >>> id(b) 23564584 >>> a is b False >>> a == b True
object의 id를 비교할 경우 "is"를 사용하고, 해당 값을 비교할 경우 "=="을 사용하게 되는데 그 값이 다르게 나타난다.
'Language > Python' 카테고리의 다른 글
[04-2] Python - 논리연산자/비트연산자 (boolean/bitwise operation) (0) | 2016.12.30 |
---|---|
[04-1] Python - range 와 xrange 의 비교 및 차이점 확인 (0) | 2016.08.11 |
[03-2] Python - for (반복문, Loops) (0) | 2016.08.11 |
[02-4] Python - 리스트 (Lists) (0) | 2016.08.09 |
[02-3] Python - 문자열 (Strings) (0) | 2016.08.08 |
[02-2] Python - 숫자 (Numbers) (0) | 2016.08.07 |
[02-5] Python - 튜플 (tuple) (0) | 2016.08.07 |
[03-1] Python - if (조건문) (0) | 2016.08.01 |