AboutPython
[파이썬] 객체와 메모리
scone
2022. 5. 3. 16:21
[객체와 메모리]
- 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.
- 변수가 객체를 참조한다는 말의 의미를 앞에서 만든 컴퓨터 클래스를 가지고 실습을 통해 알아보자.
[얕은 복사]
- 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는 것을 말한다.
class NewGenerationPc :
def __init__(self,name,cpu,memory,ssd):
self.name = name
self.cpu = cpu
self.memory = memory
self.ssd = ssd
def doExcel(self):
print('Excel Run!')
def doPhotoShop(self):
print('PhotoShop Run!')
def printPcInfo(self):
print(f'{self.name}의 성능')
print(f'self.cpu : {self.cpu}')
print(f'self.memory : {self.memory}')
print(f'self.ssd : {self.ssd}')
print()
pc1 = NewGenerationPc('jupiter','i5','8g','259g')
pc2 = NewGenerationPc('Henna','i7','16g','512g')
pc3 = pc1
pc1.printPcInfo()
pc2.printPcInfo()
pc3.printPcInfo()
'''
jupiter의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
Henna의 성능
self.cpu : i7
self.memory : 16g
self.ssd : 512g
jupiter의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
'''
pc3에 pc1 을 할당했다.
변수에는 주소가 할당되기 때문에, 결국 메모리에 저장된 (빨간 네모)의 주소가 pc1과 pc3에 동시에 공유된다.
pc3.name = 'this is pc3'
pc3.printPcInfo()
pc1.printPcInfo()
'''
this is pc3의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
this is pc3의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
'''
따라서 pc3의 속성을 변경했음에도 pc1의 속성 또한 같이 변하게 되는 것이다.
[깊은복사]
- 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
- copy 모듈의 copy 메소드를 통해 메모리에 저장된 내용물을 복사해올 수 있다. 그러면 내용물만 같은 별개의 객체가 만들어진다.
- 앞서 다룬 컴퓨터 만드는 클래스를 그대로 이용한다.
pc1 = NewGenerationPc('jupiter','i5','8g','259g')
pc2 = NewGenerationPc('Henna','i7','16g','512g')
import copy
pc3 = copy.copy(pc1)
pc1.name = 'pc1'
pc3.name = 'pc3'
pc1.printPcInfo()
pc3.printPcInfo()
'''
pc1의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
pc3의 성능
self.cpu : i5
self.memory : 8g
self.ssd : 259g
'''
단순히 같은 주소를 참조하는게 아니라는걸 알 수 있다.