2010-12-29 5 views
3

David Morrissey의 대답에 따라 'How to clone a list in python?'에 대한 성능 테스트가 실행 중이었고 numpy 배열로 작업 할 때 예기치 않은 동작이 발생했습니다. 나는 NumPy와 배열/버그 또는 기능 : 번호 매김 배열 복제/자르기

clone = numpy.array(original) 

또는

clone = numpy.copy(original) 

/w를 복제해야 할 수 있지만 잘못 너무 트릭을 할 것이라고 슬라이스를 가정 한 것을 알고있다. 그러나 :

In [11]: original = numpy.arange(4) 

In [12]: original 
Out[12]: array([0, 1, 2, 3]) 

In [13]: clone = original[:] 

In [14]: clone 
Out[14]: array([0, 1, 2, 3]) 

In [15]: clone[0] = 1 

In [16]: clone 
Out[16]: array([1, 1, 2, 3]) 

In [17]: original 
Out[17]: array([1, 1, 2, 3]) 

이 약간의 불일치에 대한 충분한 이유가 있습니까? 아니면 버그를 제기해야합니까?

답변

11

numpy에서 슬라이스는 원래 배열의 참조 또는 "뷰"이므로 복사본이 아닙니다. 그것은 의도적으로 설계된 것이지 버그는 아닙니다. 그 이유는 사본이보기만큼 유용하지 않기 때문입니다.