2012-10-23 5 views
-2

프로그램을 실행하면서 항목을 추가하는 목록이 있으며이 목록의 사본을 만들었 기 때문에 사본을 변경/수정/검토 할 수 있습니다. 원래.python에서 목록의 복사본이 변경 사항을 따라 잡지 못함

import copy 
originallist.append(stuff) 

combined=''.join(originallist) 

copyoriginal=copy.deepcopy(originallist) 
##this didnt work as copyoriginal stayed empty [] while originallist would change. 
#i also tried 
copyoriginal=list(originallist) 
#AND 
copyoriginal=originallist[:] 
#and with both cases copyoriginal remained at [] while originallist would change!! 

은 왜 변경되지 않습니다

이것은 내가 지금까지있어 무엇인가?

+0

나는 당신이 옳은 길에 있다고 생각하지만, 계속 진행중인 무언가가있을 것입니다. 'originallist'가 그 안에 물건을 가지고 시작했다면,''copyoriginal이 비어있다 ''는 것이 정확히 무엇을 의미합니까? 보다 구체적인 예가 도움이 될 것입니다. 실제 출력과 예상 출력이 있습니다. –

+0

안녕하세요, 빠른 답장을 보내 주셔서 감사합니다. 그게 무슨 뜻인지 내가 그것을 보여줍니다 프로그램을 디버깅 할 때 그 copyoriginal는 [] (originallist 그것 [2,6] – 3MIN3M

답변

0

다른 목록을 "변화와 유지"하려면, 대신 사본의 간단한 참조 사용을 고려할 수 있습니다 : 당신이 당신을 결정할 때 당신은 항상 나중에 복사본을 만들 수 있습니다

a = [1, 2, 3] 
b = a # b refers to a 

a[0] = 3 
print b # prints [3, 2, 3] 

을 변경 내용 추적을 중지하려면 :

b = b[:] 
1

목록의 사본은 원래 목록의 변경 사항을 따르지 않습니다. 파이썬의 목록은 복사가 완료되면 서로 완전히 분리됩니다.

맞춤 클래스가 없으면 수행하려는 작업을 수행 할 수 없습니다.

+0

ohhh 값을 가지고있는 동안 그것에 마우스를 가져가함으로써, 파이썬을 계속 만들 수있는 또 다른 방법입니다 원래 목록으로 변경하고 copylist에 복사? 또는 매번 값을 추가 할 때 원본 목록을 계속 복사하는 것이 유일한 방법입니다.? 미리 감사드립니다. – 3MIN3M

+0

@ 3MIN3M : 정확하게 사본을 만듭니다. 변경이 완료되면 원래 목록을 복원하거나 두 목록을 모두 변경합니다. –

0

을 당신이 할 수있는 동일한 객체를 참조하는 이름을하려면 :

a = b = [] 
a.append(1) 
b.append(2) 
print(b) 
# returns [1,2] 

다른 하나에 영향을 미치지 않고 그 중 하나를 변경할 수는 없지만 변경 사항을 볼 수 있습니다.

관련 문제