다음 최소 예제를 고려하십시오. 다양한 중첩 깊이의 목록 요소를 복사 할 때 누군가가 명백하게 일치하지 않는 논리 인 numpy
을 설명 할 수 있습니까?numpy 배열을 복사 할 때 명백하게 일치하지 않는 동작
import numpy as np
L = [[[[1, 1], 2, 3]]]
A1 = np.array(L)
A2 = A1.copy()
A1[0][0][2] = 'xx'
A1[0][0][0][0] = 'yy'
print "\nA1 after changes:\n{}".format(A1)
print "\nA2 only partially changed:\n{}".format(A2)
결과 : 다음
A1 after changes:
[[[['yy', 1] 2 'xx']]]
A2 only partially changed:
[[[['yy', 1] 2 3]]]
는 :
>>> print A1[0][0][2] == A2[0][0][2]
False
>>> print A1[0][0][0][0] == A2[0][0][0][0]
True
나는 힘든 시간 3
가 교체되지 않는 이유 자신에게 설명을 가지고 있지만 더 깊은 수준에서 1
입니다.
A2 = np.array(A, copy=True)
및A2 = np.empty_like(A); np.copyto(A4, A)
A2 = A[:]
상기 코드와 동일하게 동작은A2 = A
와 동일하게 동작 : 양쪽이 동일한 변화import copy; A2 = copy.deepcopy(A)
는 I 독립을 만들 수있는 유일한 솔루션 인 후 부.
깊은 사본으로 만 이러한 현상이 일어나지 않는다는 것을 알았 으면 무엇이 당신을 혼란 스 킵니까? 다른 경우에는 * 동일한 참조 가능한 객체에 대한 참조를 복사합니다. – jonrsharpe
'dtype = object' 배열을 가지고 있기 때문입니다 ... 기본적으로 파이썬리스트와 2 개의 파이썬 정수에 대한 참조를 보유하고있는 배열을 가지고 있습니다. 배열을 복사하면 참조가 복사됩니다. – mgilson
나는 그 복제본을 좋아하지 않는다. 탁구장 배열에는 특별한 복사 문제가 있습니다. 그리고'dtype' 객체 배열은이 문제를 더욱 복잡하게 만듭니다. 이 질문은 다시 열어야합니다. – hpaulj