나는 목록의 사본을 만들려고했다. (문자 그대로 원본과 아무 것도 공유하지 않는 분리 된 복제본). copy.copy()를 사용하여 2 개의 분리 목록을 만들었지 만 각 복사본의 요소가 왜 공유되는 것처럼 보입니까?Python - copy.copy()의 요소는 여전히 원래 메모리와 메모리를 공유합니까?
설명하기가 어렵습니다. 다음 출력을 확인하십시오.
>>> a = [[0,1], [2,3]]
>>> import copy
>>> b = copy.copy(a)
>>> temp = b.pop()
>>> temp
[2, 3]
>>> a
[[0, 1], [2, 3]]
>>> b
[[0, 1]]
>>> temp.append(4)
>>> temp
[2, 3, 4]
>>> a
[[0, 1], [2, 3, 4]]
>>> b
[[0, 1]]
이 보시다시피, 온도이 B에서 튀어되고, 아직 내가 온도을 변경하는 경우 (일명 새로운 물건을 추가)는 의 데이터는도 변경.
내 질문은 : 이것은 deepcopy의 예상되는 동작입니까? 그러면 목록의 사본을 어떻게 완전히 분리 할 수 있습니까?
P/S가 : 위의 예를 들어, 내가
temp = copy.copy(b.pop())
을 할 수 있지만, 이것은 적절한 방법 것 같다? 내가 원하는 것을 할 수있는 다른 방법이 있습니까?
는 P/S 2 : I가 B를 사용하는 경우에도 일어난다 = A [:]
감사합니다
사용에 대한 링크를 참조하시기 바랍니다'대신 copy.deepcopy'. 'copy.copy'는 얕은 사본만을 만듭니다. 즉, 하나의 "layer"목록 만 복사합니다. 자세한 내용은 [here] (http://stackoverflow.com/q/17873384) 및 [here] (http://stackoverflow.com/q/2612802)를 참조하십시오. –
감사합니다. 작동합니다! 나는 실제로 copy()가 그들이 문서에서 말한 deepcopy라고 생각했다. –