파이썬 깊은 복사
조회수 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 답변
-
안녕하세요!
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)) // 다름
수고하세요 (고수님들 도와주세요)
댓글 입력