id() 함수
Python에서 id() : 객체의 고유한 식별자(Unique Identifier)를 반환
=> CPython 구현에서 객체의 메모리 주소를 나타냄
고유성
Python 실행 중, 각 객체는 고유한 id 값을 가짐(= 같은 객체에 대해 항상 고유한 값을 반환, 새로운 객체가 생성되면 새로운 id가 할당)
메모리 주소와 관련
CPython에서는 id()가 객체의 메모리 주소를 반환 (다른 Python 구현에서는 이 동작이 다를 수 있음)
객체 비교
is 연산자와 함께 사용하여 두 객체가 동일한 객체인지(동일한 메모리 위치를 가리키는지) 확인할 수 있음
a is b 는 id(a) == id(b)와 동일
a = [1, 2, 3]
b = a
print(id(a)) # 140660040349888 (예: 메모리 주소)
print(id(b)) # 140660040349888
print(a is b) # True
a = 10
b = 10
print(id(a), id(b)) # 같은 값 출력 (int는 불변 객체로 재사용됨)
print(a is b) # True
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a) == id(b)) # False
print(a is b) # False
# 불변 객체
x = 10
y = 10
print(id(x) == id(y)) # True (같은 메모리 주소를 공유)
# 가변 객체
x = [1, 2]
y = [1, 2]
print(id(x) == id(y)) # False (서로 다른 객체)
객체 생성과 확인
인스턴스화 후 객체 생성
클래스를 사용해 객체를 생성
생성된 객체는 특정 메타 정보를 가짐
- 인스턴스화: 클래스를 기반으로 객체를 생성하는 과정. (생성된 객체를 인스턴스라고 함)
객체의 메타정보 확인
dir() 함수
객체가 가지고 있는 메서드와 속성의 리스트를 반환
print(dir(a))
# ['__add__', '__class__', ..., '__sizeof__', '__str__', '__subclasshook__']
__dict__ 속성
객체의 인스턴스 속성을 딕셔너리 형태로 반환
print(a.__dict__)
# {'name': 'John', 'age': 20, 'grade': 'A'}
리스트와 객체의 특성
- list는 클래스. 리스트를 생성할 때도 list() 생성자를 호출한다.
l = [] # 리스트 생성
l = list() # 위와 동일함
Docstring의 중요성
Docstring은 함수, 클래스, 모듈 등에 대한 설명을 작성하는 데 사용
주석(comment)과 다르게, 런타임 중 .__doc__으로 접근 가능
class Student:
"""
학생 정보를 담고 있는 클래스
"""
pass
print(Student.__doc__)
# 출력: 학생 정보를 담고 있는 클래스
전체 응용
class Student:
"""
학생 정보를 저장하고, 장학 점수를 관리하는 클래스
"""
# 클래스 변수
scholarship_score = 80
def __init__(self, name, age, grade):
"""
인스턴스 초기화
:param name: 학생 이름
:param age: 학생 나이
:param grade: 학생 등급
"""
self.name = name
self.age = age
self.grade = grade
def get_grade(self):
"""
학생의 등급을 반환
:return: 학생 등급
"""
print(f"called >>>> get_grade")
return f"return >>>> {self.grade}"
def change_scholarship_score(self):
"""
클래스 변수인 장학 점수를 변경
"""
Student.scholarship_score = 85
student = Student("SUBIN", 49, "A")
# 인스턴스 메서드 호출
print(student.get_grade()) # 'return >>>> A'
# 클래스 변수 접근 및 변경
print(Student.scholarship_score) # 80
student.change_scholarship_score()
print(Student.scholarship_score) # 85
# 메타정보 확인
print(dir(student)) # 속성과 메서드 리스트
print(student.__dict__) # {'name': 'SUBIN', 'age': 49, 'grade': 'A'}
'Python to AI' 카테고리의 다른 글
Python - Pandas(다차원데이터관리 : MultiIndex) (4) | 2024.12.17 |
---|---|
Machine learning (6) | 2024.12.16 |
Python - Pandas(데이터 전처리: Encoding, Embedding) (4) | 2024.12.13 |
Python - 함수의 기본적 개념과 사용법 (6) | 2024.12.12 |
Python - Pandas, Scikit-learn, SciPy(데이터 전처리 : 데이터 정규화와 표준화) (4) | 2024.12.11 |