Coding/Jump to Python

Python - 변수 / 객체의 주소 / 변수값 바꾸기 (swap)

빈그레 2023. 9. 8. 17:24

 

 

 

 


02-8 자료형의 값을 저장하는 공간, 변수

 

 

 

 

 

변수

 

 변수를 만들 때에는 =(assignment)기호를 사용한다.

 

C나 Java에서는 변수의 자료형을 직접 지정해야하지만,

파이썬은 변수에 저장된 값을 스스로 판단하여 자료형을 저장한다.

 

 

객체의 주소를 가리키는 변수

 

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

위 코드는 [1,2,3] 값을 가지는 리스트 객체가 메모리에 생성되고 변수 a는 리스트가 저장된 메모리의 주소를 가리킨다.

id함수를 사용하면 변수가 가리키는 메모리의 주소를 알 수 있다.

 

 

따라서 위 코드에서 리스트 [1,2,3] 이 들어있는 메모리의 주소는 4303....인 것이다.'

id함수는 변수가 가리키고 있는 객체의 주소값을 돌려주는 파이썬 내장 함수이다.

 

 

 

리스트 주소값 복사

위에서 a는 리스트 객체의 주소값을 가리키고 있다.

따라서 a=b라고 하면 b역시 리스트의 객체 주소를 가리키게 된다.


따라서 id함수로 변수가 가리키고 있는 객체의 주소값을 출력하면 같은 값을 반환한다.


a리스트이 값을 바꾸어도 b리스트 값 역시 바뀐다. 왜냐! a와 b는 동일한 리스트를 가리키고 있으니까
동일한 객체이므로 a is b는 True로 반환된다.


 

 

리스트 내용 복사

 

- 슬라이싱 하여 내용 복사

 

동일한 객체를 가리키는 것이 아니라 내용 자체를 복사해서 새롭게 갖고싶다면 리스트를 슬라이싱해서 b에 할당해준다.

 

 

 

-  copy 모듈을 사용하여 내용 복사

 

'from copy import copy'라는 문장을 입력하여 모듈을 사용할 수 있도록 한다. 여기서 copy함수를 사용하기 위해서이다.

 

 copy함수를 사용하면 a 리스트 내용을 그대로 복사하여 b에 할당해준다. 

 

 

 

a=b 로 주소값을 할당해주었을 때에는 둘이 동일한 객체가 되었지만, 여기서는 내용만 같은 서로 다른 객체이기 때문에 

b is a에 대하여 객체가 동일하지 않다는 False로 반환된다.

 

 

 

 

 

 


 

 

 


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

 

 

 

 

 

 

튜플(Tuple)
a,b=('python','life')

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

 

변수 a,b에 튜플을 대입한 것이다.  튜플은 괄호 생략이 가능하기 때문에, 두 예문은 동일하다.

 

 

 

리스트
[a,b] = ['python','life']

리스트로 변수를 만들 수 있다. 여기서 a는 python이고, b는 life를 가리킨다.

 

 

 

여러 변수에 같은 값 대입
a=b='python'

여러 변수에 한번에 같은 값을 대입해줄 수 있다.

 

 

 

두 변수 값 바꾸기

a,b=b,a 문장을 수행하면 두 변수가 가리키는 값이 바뀐다.

 

 

 

내용이 동일한 리스트

 

 

a와 b 리스트가 동일한 값을 가지고 있지만, 리스트를 구성하는 요소의 값만 동일할 뿐, 두 리스트는 서로 다른 메모리에 저장되어있다. 

 

변수는 리스트가 저장되어있는 메모리의 주소를 가리키는 것이므로 a와 b는 서로 다른 메모리 주소를 가리키고 있을 것이므로 a is b 에 대한 반환값은 False이다.