copy() 와 id() 문의

36 views
Skip to first unread message

youngki lyu

unread,
Jan 6, 2017, 4:48:07 AM1/6/17
to Python 3 질문 게시판
P.37에서 
>>> a = [1, 2, 3]
>>> b = a
>>> id(a), id(b)
(18091784, 18091784)
이렇기 때문에,
>>> a[0] = 38
>>> a, b
([38, 2, 3], [38, 2, 3])
동일한 리스트 객체를 참조한다고 하였습니다.

P.38의 뱀잡기 코드를 약간 수정하면,
>>> import copy
>>> a = [1, [2, 3]]
>>> cp_a = copy.copy(a)
>>> dcp_a = copy.deepcopy(a)
>>> a, cp_a, dcp_a
([1, [2, 3]], [1, [2, 3]], [1, [2, 3]])
>>> id(a[0]), id(cp_a[0]), id(dcp_a[0])
(1827578976, 1827578976, 1827578976)
>>> id(a[1]), id(cp_a[1]), id(dcp_a[1])
(57621064, 57621064, 57558152)
>>> a[0] = 5
>>> a, cp_a, dcp_a
([5, [2, 3]], [1, [2, 3]], [1, [2, 3]])
>>> id(a[0]), id(cp_a[0]), id(dcp_a[0])
(1827579104, 1827578976, 1827578976)
>>> id(a[1]), id(cp_a[1]), id(dcp_a[1])
(57621064, 57621064, 57558152)

a[0], cp_a[0], dcp_a[0]가 모두 같은 id 인데요,
a[0] = 5에서, a[0]의 값만 바뀌고, id도 바뀌었습니다.

이유가 궁금하여, 문의 드립니다.

강동인

unread,
Dec 21, 2017, 3:04:22 AM12/21/17
to Python 3 질문 게시판

저도 테스트를 해보니 

cp_a = copy.copy(a)  

이코드를 

cp_a = a 

로 하니 얕은 복사가 잘 되네요.

cp_a =a 와 cp_a = copy.copy(a) 가 동일한지 알았는데 다른가 봅니다..  


2017년 1월 6일 금요일 오후 6시 48분 7초 UTC+9, youngki lyu 님의 말:
Reply all
Reply to author
Forward
0 new messages