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
'''

단순히 같은 주소를 참조하는게 아니라는걸 알 수 있다.