파이썬은 모든 것이 객체다.
이 중에서 크게 불변 객체(immutable object)와 가변 객체(mutable object)로 구분할 수 있따.
클래스 | 설명 | 불변 객체 |
bool | 부울 | O |
int | 정수 | O |
float | 실수 | O |
list | 리스트 | X |
tuple | 리스트와 튜플의 차이는 불변 여부이며 이외에는 거의 동일하다. 튜플은 불변이므로 생성할 때 설정한 값은 변경할 수 없다. | O |
str | 문자 | O |
set | 중복된 값을 갖지 않는 집합 자료형 | X |
dict | 딕셔너리 | X |
불변 객체
무엇보다 파이썬은 모든 것이 객체다. 파이썬에서 변수를 할당하는 작업은 해당 객체에 대해 참조를 한다는 의미다.
여기에는 예외가 없으며 심지어 문자와 숫자도 모두 객체다.
10
a = 10
b = a
id(10), id(a), id(b)
# (4393858752, 4393858752, 4393858752)
위의 예를 통해서 간단히 확인할 수 있다. 10, a, b는 모두 같은 메모리상에 위치한 객체의 주소를 얻어온다. 만약 모두 원시타입이라면 각각의 값들은 각 메모리의 다른 영역에 위치할 것이다.
가변 객체
가변 시퀀스 중 하나로 리스트가 있다. int, str과는 다르게 list는 값이 바뀔 수가 있으며, 이 말은 다른 변수가 참조하고 있을 때 그 변수의 값 또한 변경된다는 얘기다.
a = [1, 2, 3, 4, 5]
b = a
b
# [1, 2, 3, 4, 5]
a[2] = 4
a
# [1, 2, 4, 4, 5]
b
# [1, 2, 4, 4, 5]
위의 예를 보면, a의 요소 하나를 조작해서 값을 변경했을 때, b의 같은 위치 요소의 값도 변경된 것을 볼 수 있다.
C++의 참조와 비교
C++의 참조 방식은 파이썬의 참조 할당 방식과는 조금 다르다.
is와 ==(이항 연산자)
파이썬의 비교 연산자는 파이썬의 객체 구조와 관련이 깊다.
- is : id( ) 값을 비교하는 함수다.
- == : 값을 비교하는 연산자다.
None은 널(null)로써 값 자체가 정의되어 있지 않으므로 ==로 비교가 불가능하다.
a = [1, 2, 3]
a == copy.deepcopy(a)
# True
a is copy.deepcopy(a)
# False
copy.deepcopy()로 복사한 결과 또한 값은 같지만 ID는 다르기 때문에 ==로 비교하면 True, is 로 비교할 경우 False가 된다.
* 파이썬에는 자바스크립트에서 아주 익숙한 삼항 연산자는 없다.
'Data Engineering' 카테고리의 다른 글
FutureWarning: 데이터프레임 행 subset 얻기 (0) | 2024.05.18 |
---|---|
uuid 식별자로 사용가능한가? (0) | 2024.05.18 |
Python 딕셔너리 (0) | 2024.05.18 |
리스트, 배열과 연결 리스트를 통합하고 속도는 양보한 파이썬의 객체 타입 (0) | 2024.05.17 |
Kafka에 대한 간단한 아키텍쳐 소개 (0) | 2024.05.17 |