<질문>
목록 복사 :shallow_copy_of_list = old_list[:]
.
dict 복사 :shallow_copy_of_dict = dict(old_dict)
.
하지만set
, 비슷한 일이 안될 까봐 걱정 했어요.new_set = set(old_set)
세트를 줄까요?
하지만 작동합니다. 그래서 나는 여기에 참고를 위해 질문과 답변을 게시하고 있습니다. 다른 사람이 같은 혼란을 겪을 경우.
<답변1>
이 두 가지 모두 세트의 복제본을 제공합니다.
shallow_copy_of_set = set(old_set)
또는:
shallow_copy_of_set = old_set.copy() #Which is more readable.
위의 첫 번째 방법이하지 않는다세트를 제공하면 적절한 구문이set([old_set])
. 작동하지 않을 것입니다.set
s는 다른 요소가 될 수 없습니다.set
s, 변경 가능하기 때문에 해시 할 수 없기 때문입니다. 그러나 이것은 사실이 아닙니다.frozenset
s, 예 :frozenset(frozenset(frozenset([1,2,3]))) == frozenset([1, 2, 3])
.
따라서 Python의 기본 데이터 구조 인스턴스 (목록, dict, set, frozenset, 문자열)를 복제하는 경험 법칙은 다음과 같습니다.
a2 = list(a) #a is a list
b2 = set(b) #b is a set
c2 = dict(c) #c is a dict
d2 = frozenset(d) #d is a frozenset
e2 = str(e) #e is a string
#All of the above give a (shallow) copy.
그래서 만약x
이러한 유형 중 하나입니다.
shallow_copy_of_x = type(x)(x) #Highly unreadable! But economical.
참고dict
,set
과frozenset
붙박이가있다copy()
방법. 목록과 문자열에copy()
균일 성과 가독성을 위해 방법도 있습니다. 그러나 그들은 적어도 내가 테스트하고있는 Python 2.7.3에서는 그렇지 않습니다.
<답변2>
게다가type(x)(x)
해킹, 가져올 수 있습니다copy
얕은 복사 또는 깊은 복사를 만드는 모듈 :
In [29]: d={1: [2,3]}
In [30]: sd=copy.copy(d)
...: sd[1][0]=321
...: print d
{1: [321, 3]}
In [31]: dd=copy.deepcopy(d)
...: dd[1][0]=987
...: print dd, d
{1: [987, 3]} {1: [321, 3]}
독 스트링에서 :
Definition: copy.copy(x)
Docstring:
Shallow copy operation on arbitrary Python objects.
'개발 > Python' 카테고리의 다른 글
[파이썬] 스크립트를 실행하려고 할 때 "ImportError: No module named" (0) | 2022.10.06 |
---|---|
파이썬 POST 바이너리 데이터 (0) | 2021.04.21 |
[파이썬] 데코레이터를 사용하여 변수를 범위에 삽입하는 방법은 무엇입니까? (0) | 2021.04.21 |
Python3의 BaseHTTPServer 또는 http.server (0) | 2021.04.21 |