파이썬 깊은 복사

조회수 602회

안녕하세요, 객체 인스턴스를 복사하는 과정에서 어려움을 겪고 있어서 질문드립니다.

import copy

class exC:
    a = None
    b = None


instA = exC()
instA.a = 5
instA.b = 5

instB = copy.deepcopy(instA)

print(id(instA))
print(id(instB))

print(id(instA.a))
print(id(instB.a))

위의 코드를 실행시켰을 때, 제가 기대하는 값은 instA.a의 주소와 instB.a의 주소가 다르게 나오는 것인데, 실제 실행값은 똑같이 나오네요. 어떻게 하면 클래스 내부의 변수들까지 새 변수로 바꿀 수 있을까요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    안녕하세요!

    import copy
    
    a = 5
    b = copy.deepcopy(a)
    print(type(a))
    print(id(a)) //같음
    print(id(b)) //같음
    
    c = [1,2]
    d = copy.deepcopy(c)
    print(type(c))
    print(id(c)) //다름
    print(id(d)) //다름
    print(id(c[0])) //같음
    print(id(d[0])) //같음
    

    단일 타입은 깊은 복사 개념이 없는것 같네요.. 클래스 내부의 변수들 까지 새 변수로 바꾸고 싶다면 5가 아닌 새로운 값으로 초기화할때 바뀌긴 합니다 ..

    import copy
    
    class exC:
        a = None
        b = None
    
    
    instA = exC()
    instA.a = 5
    instA.b = 5
    
    instB = copy.deepcopy(instA)
    instB.a = 6 // 이 부분 
    print(id(instA))
    print(id(instB))
    
    print(id(instA.a)) // 다름
    print(id(instB.a)) // 다름
    

    수고하세요 (고수님들 도와주세요)

    • 안녕하세요, 정말 그렇네요. 작성중인 프로그램에서 현재 상태를 저장하기 위한 방법으로 깊은 복사를 생각해냈던 것이라, 큰 지장이 없을 것 같습니다. 답변 감사합니다. D0Lim 2019.2.14 16:28

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)