다들 감기 조심하세요. 진짜 요즘 감기는 낫기가 어렵네 ㅠㅠ
미친 기침감기.. 몸살로 오는 것 같아 힘드네 ㅠ
파이썬 기초문풀4
파이썬 기초문풀5
파이썬 중급1
파이썬 중급2
파이썬 중급3
파이썬 중급4
파이썬 중급5~6
객체와 메모리
얕은 복사와 깊은 복사
클래스상속
생성자(01)
생성자(02)
다중 상속
오버라이딩
추상클래스
예외란?
파이썬 중급7
파이썬 중급8~9
파이썬 중급문풀1~2
파이썬 중급문풀3
파이썬 중급문풀4
📝 weekly 데이터 사이언스 스쿨 퀴즈
📝 재복습weekly 데이터 사이언스 스쿨 퀴즈
얕은복사
객체주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
- 객체 주소만 복사 (객체는 하나)
- 출력값이 같다.
깊은 복사
객체자체를 복사하는 것으로 또 하나의 객체가 만들어 진다.
- 객체 자체를 복사 (객체가 둘)
- 출력값이 다르다.
예시
class TemCls:
def __inti__ (self, n , s) :
self.number = n
self.str = s
def printClsInfo(self):
print(f'self.number: {self.number}')
print(f'self.str: {self.str}')
#얕은 복사
tc1 = TemCls(10, 'Hello')
tc2 = tc1
tc1.printClsInfo()
tc2.printClsInfo()
tc2.number = 3.14
tc2.str = 'Bye'
tc1.printClsInfo()
tc2.printClsInfo()
#깊은 복사
import copy
tc1 = TemCls(10,'Hello')
tc2 = copy.copy(tc1)
tc1.printClsInfo()
tc2.printClsInfo()
tc2.number = 3.14
tc2.str = 'Bye'
tc1.printClsInfo()
tc2.printClsInfo()
예시
# 리스트를 이용한 복사
import copy
scores = [9, 8, 5, 7, 6, 10]
scoresCopy = []
scoresCopy = scores # 얕은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
for s in scores: #깊은 복사 _ 값은 똑같지만 개체값이 다르다
scoresCopy.append(s)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
scoresCopy.extend(scores) #깊은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
scoresCopy = scores.copy() # 깊은 복사
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
scoresCopy = scores[:] # 깊은복사 _슬라이싱
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
실습_01
class1 → (class1) + class2 → (class1 + class2) + class3
- 상위 클래스로 갈수록 이전 클래스는 상속되어진다
예시
class NormalCar:
def drive(self):
print('[NomalCar] drive() called!!')
def back(self):
print('[NomalCar] back() called!!')
class TurboCar(NormalCar):
def turbo(self):
print('[TurboCar] turbo() called!!')
myTurboCar = TurboCar()
myTurboCar.turbo()
myTurboCar.drive()
myTurboCar.back()
실습_02
뎃셈, 뺄셈 기능이 있는 클래스를 만들고,, 이를 상속하는 클래스를 만들어서 곱세과 나눗 기능을 추가해보자.
class CalculatorSuper:
def add(self, n1 , n2):
return n1 + n2
def sub(self, n1, n2):
return n1 - n2
class CalculatorChild(CalculatorSuper):
def mul(self, n1 , n2):
return n1 * n2
def div(self, n1, n2):
return n1 / n2
myCalculator = CalculatorChild()
print(myCalculator.add(10, 20))
print(myCalculator.sub(10, 20))
print(myCalculator.mul(10, 20))
print(myCalculator.div(10, 20))
__init__() 가 자동 호출된다.__init__() 가 속성을 초기화 한다.super()를 이용한다.class.__init__()(self) 강제적으로 출력해서 상위 클래스의 속성를 초기화 할수 있다.예시_01
class Calculator:
def __init__(self):
print('[Calculator] __init__() called!!')
cal = Calculator()
예시_02
class Calculator:
def __init__(self, n1, n2):
print('[Calculator] __init__() called!!')
self.num1 = n1
self.num2 = n2
cal = Calculator(10, 20)
print(f'cal.num1: {cal.num1}')
print(f'cal.num2: {cal.num2}')
너무 힘들어서 어떻게 했는지 모르겠다.
약을 먹음 약을 먹어서 헤롱헤롱~
퇴근하고 와서 어떻게 잤는지 기억이 안나고 일찍 일어나서 공부한것도 진짜 놀라움
깊은복사 한번 복습해야지..
스터디노트도 마물하고 공개처리 해야지,, 할고많으당.