점프 투 파이썬 - 변수
Language/Python

점프 투 파이썬 - 변수

뉴비뉴 2019. 7. 8.

변수에 대한 부분은 자주 사용했기 때문에 간단하게 요점만 정리해보도록 하겠습니다.

 

다른 프로그래밍 언어인 C나 JAVA에서는 변수를 만들 때 자료형을 직접 지정해야 한다. 하지만 파이썬은 변수에 저장된 값을 스스로 판단하여 자료형을 지정하기 때문에 더 편리하다.

 

변수 이름 = 변수에 저장할 값

 

파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다.

객체란 우리가 지금껏 보아 온 자료형과 같은 것을 의미하는 말이다.

 

>>> a = [1,2,3] 이라고 하면 [1,2,3] 값을 가지는 리스트 자료형(객체)이 자동으로 메모리에 생성되고 변수 a는

[1,2,3] 리스트가 저장된 메모리의 주소를 가리키게 된다.

 

a 변수가 가리키는 메모리의 주소는 id()이라는 내장 함수를 사용하여 확인할 수 있다.

>>> a = [1,2,3]

>>> id(a)

24271688

 

리스트를 복사하고자 할 때

>>> a = [1,2,3]

>>> b = a

id 함수를 사용하여 확인

>>> id(a)

24271688

>>> id(b)

24271688

 

a와 b의 값이 동일함을 확인할 수 있다. 즉 a 가 가리키는 대상과 b가 가르키는 대상이 동일하다는 것을 알 수 있다.

동일한 객체를 가리키고 있는지에 대해서 판단하는 파이썬 명령어 is를 실행해보자.

>>> a is b # a와 b가 가리키는 객체는 동일한가?

True

 

>>> a[1] = 4

>>> a

[1,4,3]

>>>b 

[1,4,3]

 

a 리스트의 두 번째 요소의 값을 4로 바꾸었떠니 a만 바뀌는 것이 아니라 b도 똑같이 변경되었다. 그 이유는 a,b 모두 동일한 리스트를 가리키고 있기 떄문이다.

 

그렇다면 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가르키도록 만들 수는 없을까?

다음 2가지 방법이 있다.

 

1. [:] 이용

리스트 전체를 가리키는 [:]을 사용해서 복사하는 것이다.

>>> a = [1,2,3]

>>> b = a[:] !!! a의 리스트 내용을 가져와서 b에 넣어준다.

>>> a[1] = 4

>>> a

[1,4,3]

>>> b

[1,2,3]

a 리스트 값을 바꾸더라도 b 리스트에는 영향을 끼치지 않는다.

 

2. copy 모듈 이용

두 번째는 copy 모듈을 사용하는 방법이다. 다음 예를 보면 from copy import copy는 단순히 copy 함수를 쓰기 위해 사용하는 것이라고만 알아두자.

 

>>> from copy import copy

>>> b = copy(a) !!! b = a[:] 와 동일하다.

 

두 변수가 같은 값을 가지면서 다른 객체를 제대로 생성했는지 다음과 같이 확인해보자.

>>> b is a

False

 

변수를 만드는 여러 가지 방법

>>> a, b = ('python','life')

위 예문처럼 튜플로 a,b에 값을 대입할 수 있다.

>>> (a,b) = 'python','life' 와 동일하다.

 

튜플은 괄호를 생략해도 된다.

 

리스트로 변수를 만들 수도 있다.

>>> [a,b] = ['python','life']

>>> a = b = 'python'

 

 

정리

-일반 변수는 a = 1, b = a 로 했을 시 a의 값이 변경되도 b의 값이 같이 변경되지 않지만

-리스트를 저장한 변수의 경우 a = [1,2,3], b = a 후 a[0] = 5 로 변경하면 b도 같이 5로 변경된다.

-위와 같은 부분을 해결하기 위해서는 [:] 와 copy를 사용하면 된다.

 

댓글

💲 추천 글