아래 코드에서 무슨 일이 일어나고 있는지 이해할 수 없습니다.
#swaps list in index 1
L=[[1,2],[3,4]]
def swap(X):
beta=X[:]
beta[1][0],beta[1][1]=beta[1][1],beta[1][0]
return beta
def code(W):
alpha=W[:]
print swap(alpha)
return swap(alpha)
print code(L)
그것은 출력을 제공합니다
[[1, 2], [4, 3]]
[[1, 2], [3, 4]]
내가 기대하는 동안
[[1, 2], [4, 3]]
[[1, 2], [4, 3]]
그 이유는
alpha = W[:] # and also beta=X[:]
목록 의 얕은 복사본 만 만듭니다 . 이것은 외부 목록 만 실제로 복사 된다는 것을 의미합니다 . 이 외부 목록은 다시 더 많은 목록에 대한 참조를 포함합니다.이 목록은 복사되지 않습니다 ( 참조 만 해당 ).
그래서 사본 alpha
과는 beta
항상 언급하는 같은 중첩 된 목록 및 이러한 목록의 요소를 교환. 이것이 호출 후 스와핑이 두 번 일어나는 것을 볼 수있는 이유입니다.
swap(alpha)
두번.
깊은 사본을 만들고 싶다면 copy
모듈을 사용하고
alpha = copy.deepcopy(W) # instead of alpha = W[:]
과
beta= copy.deepcopy(X) # instead of beta = X[:]
이렇게하면 예상 출력이 제공됩니다.
[[1, 2], [4, 3]]
[[1, 2], [4, 3]]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다