copy.copy() 및 copy.deepcopy() 및 Python의 범위를 사용하는 데 문제가 있습니다. 함수를 호출하고 사전이 인수로 전달됩니다. 사전은 로컬 사전을 복사하지만 사전은 복사 된 값을 보유하지 않습니다.복사/deepcopy 및 변수 범위
def foo (A, B):
localDict = {}
localDict['name'] = "Simon"
localDict['age'] = 55
localDict['timestamp'] = "2011-05-13 15:13:22"
localDict['phone'] = {'work':'555-123-1234', 'home':'555-771-2190', 'mobile':'213-601-9100'}
A = copy.deepcopy(localDict)
B['me'] = 'John Doe'
return
def qua (A, B):
print "qua(A): ", A
print "qua(B): ", B
return
# *** MAIN ***
#
# Test
#
A = {}
B = {}
print "initial A: ", A
print "initial B: ", B
foo (A, B)
print "after foo(A): ", A
print "after foo(B): ", B
qua (A, B)
copy.deepcopy는 "foo"함수 내에서 작동하며 dict A는 localDict의 내용을 갖습니다. 그러나 "foo"의 범위를 벗어나면, dict A는 비어 있습니다. 한편, 키와 값이 할당 된 후, dict B는 'foo'함수를 벗어나 값을 유지합니다.
copy.deepcopy()가 "foo"함수 외부로 복사하는 값을 어떻게 유지합니까?
왜'foo'가'return localDict, B'를하고 코드에서'A, B = foo (A, B)'를 사용하지 않을까요? 그렇게하면 * 작동 할 것이고'copy' 모듈을 전혀 사용할 필요가 없습니다.또한 파이썬의 객체 참조에서 조금 읽으십시오 : http://stackoverflow.com/questions/575196/in-python-why-can-a-function-modify-some-arguments-as-perceived-by-the-caller – Blender
@Blender, 예 그럴 수는 있겠지만 사전을 참조로 전달할 때 deepcopy()가 파이썬 사전에서 범위 문제를 일으키는 이유를 알고 싶습니다. – SQA777
복사는'deepcopy' 또는'copy'가 아닙니다 (복사하려면'dict (otherdict) '를 사용해야합니다.). 파이썬은 객체를 함수로 전달할 때 PHP처럼 작동하지 않으며 일부 객체 만 수정할 수 있습니다. 내가 연결된 질문에 대한 대답을 읽으십시오. – Blender