변수(Variable)

2019. 9. 3. 23:53· 파이썬 문법
목차
  1.  
  2. 파이썬에서 메모리에 할당된 객체의 주소는 id( )함수를 사용하면 된다.
  3.  
  4. 두 개의 변수에 각각 같은 값을 할당했다고 항상 같은 메모리 주소값을 가지지는 않는다.
  5.  
  6. 왜 파이썬은 이렇게 작동하나?
  7. 파이썬의 변수는 상자가 아니다.
  8.  
  9. 또 다른 예
  10.  
  11.  
  12. b에다가 a의 값 [1, 2, 3]을 넣고서 4를 추가하였는데 왜 변수 a의 리스트가 [1, 2, 3]이 아닌 [1, 2, 3, 4]인걸까?
  13.  
  14. is 연산자를 통해 a변수와 b변수가 가지는 메모리주소가 가리키는 객체가 같음을 알 수 있다.
  15. mutable한 객체 list와 immutable한 객체 str을 비교하여 보자.
  16. Memory Visualization

Variables.ipynb
0.01MB

Variables

 

참고한 글 1

다음과 같은 코드를 실행했다 가정해보자.

a = 10  

=> a라는 이름의 변수공간에 정수 10을 넣었다. (x)

=> a가 '어떤 주소값'을 가지는데 그 '어떤 주소값'이 가리키는 공간에 100이라는 '값(value)'의 '정수형 객체(object)'가 존재한다.(o)

다시 말해 변수(variable)는 값(value)을 가진 객체(object)가 존재하는 곳을 가리키는 주소(memory address)를 가진다고 볼 수 있다.

 

파이썬에서 메모리에 할당된 객체의 주소는 id( )함수를 사용하면 된다.

aa = 123
bb = 124
print("aa의 메모리 주소 : ", id(aa))
print("bb의 메모리 주소 : ", id(bb))
aa의 메모리 주소 :  4504970160
bb의 메모리 주소 :  4504970192

 

두 개의 변수에 각각 같은 값을 할당했다고 항상 같은 메모리 주소값을 가지지는 않는다.

x = 100
y = 100
x is y
True
xx = 10000
yy = 10000
xx is yy
False

 

왜 파이썬은 이렇게 작동하나?

프로그램을 작성할때 자주 사용할 것 같은 범위의 정수값(integer)은 메모리에 한 번만 올려두고 이를 여러번 변수가 가리키게 함으로써 메모리를 효율적으로 사용하기 위해서다.

256까지는 id값이 같지만 257부터는 서로 다른 객체가 생성된다.

x = 256
y = 256
x is y
True
x = 257
y = 257
x is y
False

 

 

 


참고한 글 2

파이썬의 변수는 상자가 아니다.

  • 파이썬 변수는 상자가 아니라 포스트잇과 같은 존재라 생각해보자
a = [1, 2, 3]
b = a
b.append(4)
print(a)

를 하면 어떤 값이 나올까?

[1, 2, 3]이 나올까?

 

a = [1, 2, 3]
b = a
b.append(4)
print(a)
[1, 2, 3, 4]

 

또 다른 예

a = "hello"
b += " world"
print(b)
hello world

 

 

b에다가 a의 값 [1, 2, 3]을 넣고서 4를 추가하였는데 왜 변수 a의 리스트가 [1, 2, 3]이 아닌 [1, 2, 3, 4]인걸까?

이는 [1, 2, 3]이라는 값을 가진 리스트타입의 객체에 a와 b라는 이름의 포스트잇을 붙였기 때문이다.

따라서 b에서 4를 추가하면 b가 가리키는 주소값을 타고서 [1, 2, 3]이라는 리스트 객체에 도달하여 4가 추가되는 것이기에 [1, 2, 3]이라는 리스트객체의 또다른 이름인 a에서도 같이 변경되는 것이다.

이처럼 파이썬에서는 하나의 객체에 여러 변수들을 할당할 수 있다. => aliasing

 

is 연산자를 통해 a변수와 b변수가 가지는 메모리주소가 가리키는 객체가 같음을 알 수 있다.

  • is연산자가 비교하는 것은 객체의 메모리 주소라는 것
a is b
True

 

 

 


참고한 글3

mutable한 객체 list와 immutable한 객체 str을 비교하여 보자.

a = [1, 2, 3]
print(id(a))
a.append(1)
print(id(a))
4544356808
4544356808
a = "hello"
print(id(a))
a += " world"
print(id(a))

list에는 값을 추가해도 id값이 바뀌지 않지만 str의 경우에는 id값이 바뀐다.

str은 immutable이기에 값을 변경할 수 없을 뿐더러 id가 바뀐것은 값을 재할당한 것이기 때문이다.

 

 

Memory Visualization

  • 변수의 메모리주소값 변경 과정을 볼 수 있다.

 

 

 

 

 

ps.1. ipynb파일을 md파일로 변형하여 업로드한 것이니 보기 불편하신 분들은 ipynb로 열어보시는길 권합니다.

ps.2. 잘못된 개념에 대한 지적을 매우 환영합니다. 
보고서 의아한 점이 있다면 부디 댓글 달아주세요.
반응형
저작자표시 (새창열림)

'파이썬 문법' 카테고리의 다른 글

파이썬 리스트에 요소 추가 시 주의하기 (feat.속도)  (0) 2022.07.02
논리연산자 실행시 주의사항  (0) 2019.10.04
비트연산자와 논리연산자  (0) 2019.08.18
쥬피터 노트북 기능  (0) 2019.08.18
Hello-Javascript!  (0) 2019.07.21
  1.  
  2. 파이썬에서 메모리에 할당된 객체의 주소는 id( )함수를 사용하면 된다.
  3.  
  4. 두 개의 변수에 각각 같은 값을 할당했다고 항상 같은 메모리 주소값을 가지지는 않는다.
  5.  
  6. 왜 파이썬은 이렇게 작동하나?
  7. 파이썬의 변수는 상자가 아니다.
  8.  
  9. 또 다른 예
  10.  
  11.  
  12. b에다가 a의 값 [1, 2, 3]을 넣고서 4를 추가하였는데 왜 변수 a의 리스트가 [1, 2, 3]이 아닌 [1, 2, 3, 4]인걸까?
  13.  
  14. is 연산자를 통해 a변수와 b변수가 가지는 메모리주소가 가리키는 객체가 같음을 알 수 있다.
  15. mutable한 객체 list와 immutable한 객체 str을 비교하여 보자.
  16. Memory Visualization
'파이썬 문법' 카테고리의 다른 글
  • 파이썬 리스트에 요소 추가 시 주의하기 (feat.속도)
  • 논리연산자 실행시 주의사항
  • 비트연산자와 논리연산자
  • 쥬피터 노트북 기능
sovelop
sovelop
무슨 생각을 해.. 그냥 하는거지
sovelop
so's devlog
sovelop
전체
오늘
어제
  • 분류 전체보기 (141)
    • 🔥TIL (15)
    • 생각 (5)
      • Daily Routine (0)
    • WEB (2)
    • VueJS (1)
    • 파이썬 문법 (17)
      • Django (0)
    • 알고리즘 (23)
      • 백준 알고리즘 (13)
      • 프로그래머스 (0)
      • 기타 사이트 알고리즘 (6)
    • 컴퓨터공학입문 (13)
    • Data_Analysis (9)
    • Javascript (8)
      • 문법 (8)
      • node.js (0)
    • Java (9)
      • 문법 (3)
      • Android Studio (0)
      • Algorithm (2)
    • Server (6)
      • sql (2)
      • linux (2)
    • Back-up (22)
      • Git + Github (5)
      • English (0)
      • etc (17)
    • 테크 관련 세미나 (4)
    • English (0)
    • Error (4)
    • 코테후기 (0)

블로그 메뉴

  • About me

공지사항

인기 글

태그

  • 무접점저소음
  • # 백준 #파이썬 #python
  • 혼공자
  • va87m
  • 혼공단
  • 코딩좀알려주라
  • 한빛미디어
  • 코알라univ

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
sovelop
변수(Variable)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.