목록을 복사하는 가장 좋은 방법은 무엇입니까?
이 질문에 이미 답변이 있습니다.
목록을 복사하는 가장 좋은 방법은 무엇입니까? 다음 방법을 알고 있는데 어느 것이 더 낫습니까? 아니면 다른 방법이 있습니까?
lst = ['one', 2, 3]
lst1 = list(lst)
lst2 = lst[:]
import copy
lst3 = copy.copy(lst)
얕은 복사본을 원하면 (요소가 복사되지 않음) 다음을 사용하십시오.
lst2=lst1[:]
전체 복사를하려면 복사 모듈을 사용하십시오.
import copy
lst2=copy.deepcopy(lst1)
나는 자주 사용합니다 :
lst2 = lst1 * 1
lst1에 다른 컨테이너 (다른 목록과 같은)가 포함 된 경우 Mark가 표시 한대로 copy lib의 deepcopy를 사용해야합니다.
업데이트 : 딥 카피 설명
>>> a = range(5)
>>> b = a*1
>>> a,b
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
>>> a[2] = 55
>>> a,b
([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])
변경된 내용 만 볼 수 있습니다. 이제 목록 목록으로 시도해 보겠습니다.
>>>
>>> a = [range(i,i+3) for i in range(3)]
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> b = a*1
>>> a,b
([[0, 1, 2], [1, 2, 3], [2, 3, 4]], [[0, 1, 2], [1, 2, 3], [2, 3, 4]])
읽기 어렵 기 때문에 for로 인쇄 해 보겠습니다.
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> a[1].append('appended')
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
보이 시죠? b [1]에도 추가되었으므로 b [1]과 a [1]은 매우 동일한 객체입니다. 이제 deepcopy로 시도하십시오.
>>> from copy import deepcopy
>>> b = deepcopy(a)
>>> a[0].append('again...')
>>> for i in (a,b): print i
[[0, 1, 2, 'again...'], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
다음을 수행 할 수도 있습니다.
a = [1, 2, 3]
b = list(a)
나는하고 싶다 :
lst2 = list(lst1)
lst1 [:]에 비해 장점은 동일한 관용구가 dict에 적용된다는 것입니다.
dct2 = dict(dct1)
Short lists, [:] is the best:
In [1]: l = range(10)
In [2]: %timeit list(l)
1000000 loops, best of 3: 477 ns per loop
In [3]: %timeit l[:]
1000000 loops, best of 3: 236 ns per loop
In [6]: %timeit copy(l)
1000000 loops, best of 3: 1.43 us per loop
For larger lists, they're all about the same:
In [7]: l = range(50000)
In [8]: %timeit list(l)
1000 loops, best of 3: 261 us per loop
In [9]: %timeit l[:]
1000 loops, best of 3: 261 us per loop
In [10]: %timeit copy(l)
1000 loops, best of 3: 248 us per loop
For very large lists (I tried 50MM), they're still about the same.
You can also do this:
import copy
list2 = copy.copy(list1)
This should do the same thing as Mark Roddy's shallow copy.
In terms of performance, there is some overhead to calling list()
versus slicing. So for short lists, lst2 = lst1[:]
is about twice as fast as lst2 = list(lst1)
.
In most cases, this is probably outweighed by the fact that list()
is more readable, but in tight loops this can be a valuable optimization.
ReferenceURL : https://stackoverflow.com/questions/184643/what-is-the-best-way-to-copy-a-list
'programing tip' 카테고리의 다른 글
Font Awesome 기호 위에 배지를 추가하는 방법은 무엇입니까? (0) | 2021.01.06 |
---|---|
생성자에서 암시 적 변환을 피합니다. (0) | 2021.01.06 |
iPhone에서 NSTimeInterval을 연도, 월, 일,시, 분 및 초로 나누려면 어떻게합니까? (0) | 2021.01.06 |
UIScrollView에서 contentOffset은 무엇을합니까? (0) | 2021.01.06 |
전체 텍스트 파일을 Java의 문자열로 (0) | 2021.01.06 |