<Py> 파이썬 변수는 뭐고 객체는 뭔데

Sinjae Lee·2021년 5월 19일
0

이전 게시글에서 <문제2.>을 푸는 중 다음과 같은 코드를 썼다

age = int(input())
balance = 9000
if age>=7 and age<=12:
    balance = balance - 650
elif age>=13 and age<=18:
    balance = balance - 1050
elif age>=19:
    balance = balance - 1250
print(balance)

여기서 궁금해지는 것

a = 1300
b = 1300
c = a
  1. 이것들은 전부 같은 놈인가?
a = 1300
b = 1300
c = a
a = a-200
  1. 여기서는 a = 1300 의 a 와
    a = a-200 에서 좌항의 a는 같은 놈일까
    또 a가 같은 놈이라고 하면 c 값은 변하는걸까

궁금한건 또 참을 수 없지

자 예를 들어보자
당신의 통장잔고에 1,000만원이 있다고 해보자
그리고 이 통장에는 월급 300만원이 들어온다
그리고 고정지출비용이 100만원이 빠져나간다
이걸 코드로 쳐보면

Jan_account_balance = 10000000
salary = 3000000
expenditure = 1000000
Feb_account_balance = Jan_account_balance + salary - expenditure
Mar_account_balance = Feb_account_balance + salary - expenditure
.
.
.

이런식으로 칠 수 있을거다 여기서 일단 Jan_account_balance, salary, expenditure, Feb_account_balance 등은 전부 변수다
그리고 우항의 값이 객체다
이 해당 변수가 가리키는(바인딩하는) 값이 무엇인지 쉽게 알도록 변수를 만드는 것이 중요하다.

자 그럼 다시 위의 코드를 가져와서

a = 1300
b = 1300
c = a

이 코드에서 a는 변수고 1300 이라는 값이 객체이다
그렇다면 이것들은 어디에 저장되어 있는걸까?
메모리 라는 말 많이 들어보지 않았나?
실제로 변수가 바인딩하는 객체 값은 메모리에 저장되며 저 위의 통장 잔고 계산을 하는 우항 또한 메모리에서 연산이 이루어 지는 것이다

근데 메모리에 객체가 저장 될때 우리 서랍에 물건을 아무렇게나 던져놓듯이 저장되는것일까?

이 메모리에 객체가 저장될때는 특정한 id 주소를 가지게 된다.

a = 1370
b = 1370
c = int(a)
a = a-100

print(a)
print(b)
print(c)

print(id(a))
print(id(b))
print(id(c))

if a==c:
    print('참')
else:
    print('거짓')

출력값
a>> 1270
b>> 1370
c>> 1370
id(a)>> 140214946784688
id(b)>> 140214946784528
id(c)>> 140214946784528
a==c >> 거짓
이렇게 출력된다

만약 a= a-100 이 없다면
a>> 1370
b>> 1370
c>> 1370
id(a)>> 140214946784528
id(b)>> 140214946784528
id(c)>> 140214946784528
a==c >> 참
이렇게 출력된다.

즉 변수 a, b, c 가 같은 객체 값을 바인딩 할 때에는 이 그림과 같고

a = a-100 이 추가 되었을때에는 a가 가르키는 객체값이 변경되므로

위와 같이 a는 b,c 와 다른 객체를 바인딩하게 된다.

자 이것은 같은 1370 이라는 값이 메모리에 할당 되는데
a = 1370 , b = 1370
이렇게 두개의 변수가 존재한다고 하여서 메모리 내부에 다른 주소로 1370을 할당해주면 메모리 사용이 비 효율적이기 때문에 효과적인 매모리 사용을 위해 같은 주소의 id를 바인딩 하게 되는것이다

사실 모든 경우에 객체를 메모리에 한번만 올려두고 동일한 객체 값을 가르키는 모든 변수를 동일한 메모리에서 관리하는것은 아니라고 한다.

일단 책에서는 int 값 -255 ~ 256 까지는 동일한 id 내에서 가지고
그 이상 or 이하의 값에서는 같은 300 값을 가리켜도 다른 id 주소를 바인딩한다고 하는데 막상 pycham 에서 코드를 실행시켜보면 숫자가 100000을 넘어가도 동일한 메모리에서 관리하긴한다.

추후에 해당 내용에 대한 지식을 습득하는데로 내용을 추가하겠다.

이상 끝

profile
Back-end developer

0개의 댓글

관련 채용 정보