[python] 사전을 파이썬으로 복사하는 빠른 방법


Answers

Appearantly dict.copy가 더 빠릅니다.

[utdmr@utdmr-arch ~]$ python -m timeit -s "d={1:1, 2:2, 3:3}" "new = d.copy()"
1000000 loops, best of 3: 0.238 usec per loop
[utdmr@utdmr-arch ~]$ python -m timeit -s "d={1:1, 2:2, 3:3}" "new = dict(d)"
1000000 loops, best of 3: 0.621 usec per loop
[utdmr@utdmr-arch ~]$ python -m timeit -s "from copy import copy; d={1:1, 2:2, 3:3}" "new = copy(d)"
1000000 loops, best of 3: 1.58 usec per loop
Question

사전을 많이 사용하는 Python 프로그램이 있습니다. 사전을 수천 번씩 만들어야합니다. 열쇠와 관련 내용의 사본이 필요합니다. 사본이 편집되고 원본과 연결되어서는 안됩니다 (예 : 사본의 변경 사항이 원본에 영향을 미치지 않아야 함).

키는 문자열이며, 값은 정수 (0/1)입니다.

나는 현재 간단한 방법을 사용하고있다.

newDict = oldDict.copy()

내 코드를 프로파일 링하면 복사 작업이 대부분의 시간이 걸리는 것으로 나타납니다.

dict.copy() 메소드에 대한 더 빠른 대안이 있습니까? 무엇이 가장 빠를까요?




나는 이것이 오래된 쓰레드라는 것을 알고있다. 그러나 이것은 "dict copy python"에 대한 검색 엔진에서 가장 높은 결과이며, "dict copy performance"에 대한 최상위 결과이며, 이것이 적절하다고 생각한다.

파이썬 3.7에서 newDict = oldDict.copy() 는 이전보다 최대 5.5 배 빠릅니다. 특히, 지금 당장 newDict = dict(oldDict) 는 이러한 성능 향상을 보이지 않습니다.

여기에 조금 더 많은 정보가 here .




추측을 위해 남겨둔 일에 따라 원본 사전을 랩핑하고 일종의 copy-on-write를 할 수 있습니다.

"복사"는 "부모"사전에 내용을 조회하는 사전입니다 (아직 키가 포함되어 있지 않은 경우). 그러나 자체적으로 수정이 적용됩니다.

이는 원본을 수정하지 않고 여분의 조회가 비용이 많이 들지는 않는다고 가정합니다.




Related