본문 바로가기

교육 노트/파이썬 강의

[파이썬 때려잡기] Python 강의 11 - 변수와 메모리

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 1 - Hello World!

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 2 - 변수와 자료형, 연산자

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 3 - 파이썬의 자료구조, 리스트 (list)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 4 - 파이썬의 스트링 (string)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 5 - 스트링과 리스트 처리-1

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 6 - 스트링과 리스트 처리-2

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 7 - 튜플 (tuple)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 8 - 딕셔너리 (Dictionary)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 9 - 집합 (set)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 10 - 사용자 입출력

지금까지 각종 변수와 자료형을 다루었는데

해당 변수는 어떻게 만들어지고 활용되는것일까?

그것을 확인해보기 위하여 킹갓 사이트 http://pythontutor.com/visualize.html를 사용해 보았다.


1. 변수와 메모리


x = 5
y = 10
s = "hello world"
l = [1,2,3,4]
t = (1,2,3,4)

변수들은 다음과 같이 메모리에 잡힌다.



t =(1,2,3,[4,5,6])

과 같은 코드는

이런식으로 잡힌다.





2. copy

x = 5
y = x

y = 10

과같은 코드는

이런식으로 (y만 바뀜)

x = "str"
y = x

과 같은 코드도

과 같이 x값이 y에 복사되어 들어가게 된다.


그럼 리스트는 어떨까?

x = [1,2,3,4]
y = x

x와 y가 같은 리스트를 가르키게 된다.

즉 x와 y는 변수명이 다르지만 완전하게 같은 리스트를 나타낸다 (단순히 값만 같은것이 아님)

따라서

x = [1,2,3,4]
y = x
y[0] = 10

다음과 같이 y를 통하여 값을 변경해도 x가 나타내는 리스트또한 바뀌게 된다.

만약 원하는 의도가 이런것이라면 그냥 쓰면 되는데

그게 아니라 값만 고대로 가지고 와서 새로운 리스트를 만들고 싶은것이라면


copy메소드를 사용해아한다.

x = [1,2,3,4]
y = x.copy()
y[0] = 10


또는

from copy import copy

x = [1,2,3,4]
y = copy(x)


또는 그냥

x = [1,2,3,4]
y = x[:]

과같이 슬라이싱 을 통하되 그냥 처음부터끝까지 해버리면 된다.

슬라이싱을 해당 영역만큼 카피가되므로 귀찮으면 x[:] 와 같은 방법을 통하여 리스트를 카피할수가있다,



3 swap

a와 b의 값을 서로 바꾸고 싶어서 (이를 swap이라한다) 다음과 같이 코딩하였다.


x = 1
y = 2


x = y
y = x
print (x)
print (y)


2
2


둘다 2가 되어버렸다.

이유는 x=y에서 x에 이미 2가 들어가므로 y=x에 2가 들어가는것이다.


그래서 이를 해결하기위해 값을 저장하기위한 변수를 하나 만들어놓는다

x = 1
y = 2

temp = x
x = y
y = temp
print (x)
print (y)

요런식으로

대부분의 언어들은 다음과 같이 swap 을 처리한다

대부분의 컴퓨터 공학도들은 이 방법에 매우 익숙한데

일반인 입장에서 a와 b를 바꾸는데 temp를 만들어서 저장하고 어쩌고... 가 읽기도 불편하고~ 이해하기도 어렵고~


하지만 킹갓 파이썬은 다음과 같은 방법을 제공한다

x = 1
y = 2

x,y = y,x #swap!

print (x)
print (y)


2
1


x,y = y,x 하면 된다.

이렇게 하면 왜 되느냐하면 y,x가 튜플로 처리되어 변수에 대입되는것인데

알면좋은데 몰라도 걍 쓰면 된다.

728x90