[Python] 자료형 값의 저장하는 공간, 변수

David Kim·2022년 10월 30일
0

Python

목록 보기
10/11
post-thumbnail

파이썬의 특성

>>> a = 1
>>> b = "hi"
>>> c = [1, 2, 3]

위 예시 처럼 파이썬의 특성은 '변수 이름 = 변수에 저장 할 값' 이런 식으로 나타낸다. 위 처럼 변수에 저장된 값을 스스로 판단하여 자료형을 저장하기 때문 파이썬이 편리한 이유 중 하나이다.

변수란?

파이썬에서 사용하는 변수는 객체를 가리키는 말이다. 여기서 객체란 이제까지 공부한 자료형을 의미하는 바와 같다.

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

위의 예시로 a는 변수이고 [1, 2, 3] 리스트 자료형의 객체이자 a라는 변수의 메모리가 저장이 된다.

메모리 주소 확인하는 방법

>>> a = [1, 2, 3]
>>> id(a)
4331347200

id 함수는 변수가 가리키고 있는 객체의 주소값을 돌려주는 함수이다. 즉 여기서 변수 a가 가리키는 리스트 주소 값은 4331347200 이다.

리스트 복사하기

>>> a = [1, 2, 3]
>>> b = a
>>> id(a)
4331347200
>>> id(b)
4331347200
>>> a is b
True
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]

위 코드를 해석하자면 b는 a와 완전히 동일하다고 할 수 있다. a 변수 1개에 b 변수가 추가되어 2개로 늘어난 차이만 있다. 그래서 id 함수로 확인 할시 둘다 값은 주소가 나온다. 더불어 명령어 is로 확인을 해도 참(True)가 나온다. 또한 a[1]로 숫자를 변경해도 b 역시 똑같이 리스트안 두번째열도 4로 바뀐다.

그.렇.다.면. a 변수의 값을 가져오면서 a와 다른 주소를 가리키도록 만들 수는 없을까?

[:] 사용

>>> a = [1, 2, 3]
>>> b = a[:] ⬅️ 리스트 a의 처음부터 끝까지 슬라이싱
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]

copy 모듈 사용

>>> from copy import copy
>>> a = [1, 2, 3]
>>> b = copy(a) ⬅️ b = a[:]와 동일
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b is a
False

위의 예시처럼 a와 b의 리스트 값은 똑같지만 동일한 메모리 주소가 아니기에 False가 뜬다. 즉 a와 b가 가르키는 객체는 서로 다르다는 뜻이다. 그치만 여기서 하나 더 들어가보자

Object equality & Value equality

>>> b == a
True

이러면 True가 뜬다 왜 일까? 위에서는 'b is a' 라고 하면 분면 False가 떴는데 여기서 '==' 는 a와 b는 메모리 주소는 다르지만 벨류(value)가 같기에 True라고 나오는거다. 이것을 Object equality와 Value equality라고 한다. 근데 실상에서는 오브젝트가 같은지 알아야 할 경우는 많지 않기에 == 만 잘 확인해서 써보자.

profile
people rarely succeed unless they have fun in what they are doing

0개의 댓글