Language/Python

[02-1] Python - 변수 할당의 개념

TechNote.kr 2016. 8. 8. 12:13
728x90

 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"를 사용하고, 해당 값을 비교할 경우 "=="을 사용하게 되는데 그 값이 다르게 나타난다.




728x90