2017-12-17 40 views
0

은 의 얕은 사본을 Python 3.5+에 복사하는 여러 가지 방법이 있습니다. 명백한 사람은 다음과 같습니다파이썬 3.5 +에서리스트의 얕은 복사본을 만드는 가장 빠른 방법은 무엇입니까?

  • some_list.copy()
  • some_list[:]
  • list(some_list)
  • [*some_list]
  • 등 ...

가장 빠른 어떤 방법입니까?

참고 : 이 질문은 "목록 사본"과 관련이 있지만 파이썬 3.5 이상에서만 성능에 관한 것입니다. 당신은? "당신이 파이썬에서 목록의 사본이 필요합니다 왜"의 질문에 대답을해야 할 경우 또는 "? 얕은 파이썬에서 목록의 deepcopy의 차이 무엇입니까"다음을 읽어 How to clone or copy a list?

+0

다양한 옵션을 시간을 들여서보아야합니다. –

답변

1

이 질문에 대한 유일한 합리적인 대답은 실행 시간을 비교하는 것입니다. 질문이 파이썬 3.5+에 관한 것이기 때문에 파이썬 3.5에서 PEP 448 -- Additional Unpacking Generalizations이 승인되었고 파이썬 3.5+에서리스트의 얕은 복사본을 만드는 가장 빠른 방법은 [*some_list]으로 밝혀졌습니다. 측정 값은 아래에 나와 있습니다. 물론 거기에 복사본을 만들 수있는 더 많은 방법이 있지만, 나는 다음과 같은 것들에 초점을 맞출 것이다 :

  • some_list.copy()
  • some_list[:]
  • list(some_list)
  • [*some_list]
  • from copy import copy; copy(some_list)

이 시간들은 서로 관련되어 있음을 명심하십시오. 그러나 추세는 비슷하다. 으로는 아래의 그래프에서 볼 수있는 모든 변형은 거의 같은 행동을 할 때 len(some_list) >= 1000 : enter image description here

성과 지표 : enter image description here

그러나 len(some_list) < 1000에서 우리는 분명한 승자가, 그것이 [*some_list]입니다 Python 3.6.3, Windows 7에서 수행되었습니다.

+0

그 라인들이 수렴하기 때문에 정답은 실제로 "모두 같다"*. 아주 작은 목록을 제외하고, 그 대답은 * "누가 신경 쓰는지"*;) – zvone