파 이 썬 할당 과 복사
4055 단어 python값 을 부여 하 다카피
Python 에서 모든 것 이 대상 이 고 대상 은'변수 이름'을 통 해 인용 합 니 다.'변수 이름'의 더 정확 한 이름 은'이름'입 니 다.마치 우리 모두 가 자신의 이름 을 가지 고 있 는 것 처럼 우 리 는 이름 을 통 해 누 군 가 를 가리 키 고 코드 안에 이름 을 통 해 특정한 대상 을 가리 킵 니 다.
변수 할당 은 대상 에 게 이름 을 연결 하 는 것 입 니 다.할당 은 대상 을 복사 하지 않 습 니 다.마치 우리 가 태 어 났 을 때 부모님 께 서 우리 에 게 이름 을 지어 주 셨 듯 이 다른 사람 에 게 별명 을 지어 주 는 것 은 한 사람 이 더 나 오지 않 고 단지 이름 이 하나 더 있 을 뿐이다.
두 대상 을 비교 하 는 방법 은 두 가지 가 있 는데 그것 이 바로 is 와=,is 가 두 대상 이 같은 지 비교 하 는 것 이다.대상 의 ID 값 을 통 해 같은 대상 인지 아 닌 지 를 식별 할 수 있다.==두 대상 의 값 이 같은 지 비교 하 는 것 이다.
>>> x1 = [1,2]
>>> x2 = [1,2]
>>> x1 is x2
False
>>> id(x1)
4338854088
>>> id(x2)
4338904392
>>> x1 == x2
True
x1 과 x2 의 값 은 같 지만 메모리 에 서 는 두 개의 독립 된 서로 다른 대상 으로 서로 다른 메모리 공간 을 차지 하 는 것 이 마치 두 개의 똑 같이 생 긴 사과 가 책상 위 에 놓 여 있 는 것 과 같 고 사실은 두 개의 서로 다른 물체 이다.
>>> x3 = x2
>>> x3 is x2
True
>>> id(x3)
4338904392
앞에서 말 했 듯 이 할당 은 대상 에 게 이름 을 바 꾸 는 것 입 니 다.여기 서 우 리 는 x2 에 대응 하 는 그 대상 에 게 새로운 이름 을 x3 라 고 바 꾸 었 습 니 다.이것 은 마치 책상 위 에 사 과 를 놓 고 x2 라벨 을 붙 이기 시 작 했 을 뿐 입 니 다.나중에 x3 라벨 을 붙 였 습 니 다.본 질 은 같은 사과 이기 때문에 x2 와 x3 가 가리 키 는 것 은 같은 대상 입 니 다.x2 를 통 해 대상 을 수정 할 때 x3 도 이에 따라 변화 한다.본질 적 으로 그들 은 같은 대상 이기 때문에 이것 은 장 3 과 소장 이 같은 사람 일 때 장 3 에 게 옷 을 더 해 주 는 것 이 사실은 소장 에 게 옷 을 더 해 주 는 것 과 같다.
>>> x2.append(3)
>>> x2
[1, 2, 3]
>>> x3
[1, 2, 3]
그러나 내 가 x2 에 값 을 다시 부여 할 때 x2 는 이전의 대상 을 인용 하지 않 고 새로운 대상 을 인용 하 는 것 과 같다.x3 는 여전히 이전의 대상 을 인용한다.마치 책상 위의 큰 사과 가 x2 와 x3 두 개의 라벨 을 붙 이기 시작 한 것 처럼 x2 에 다시 값 을 부여 하 는 것 은 x2 라벨 을 다른 사과 에 붙 이 는 것 과 같 지만 x3 는 오래된 사과 에 붙 이 는 것 과 같다.
>>> x2 = [3, 4]
>>> x3
[1, 2, 3]
대상 복사
업무 중 에 때때로 우 리 는 대상 을 복사 해 야 하지만 원래 의 대상 에 게 부작용 을 일 으 키 고 싶 지 않 아서 새로운 변 수 를 할당 해서 해결 할 수 없 을 것 이다(할당 값 은 복사 대상 이 아니 기 때문에).그래서 Python 은 전문 적 으로 복사 체 제 를 제공 하여 원래 의 대상 을 바탕 으로 같은 값 을 가 진 대상 을 신속하게 만 들 었 다.이 기능 은 copy 모듈 에서 제공 합 니 다.
복사 본 은 또 얕 은 복사 와 깊 은 복사 로 나 뉜 다.
>>> s = [1,2,3]>>> sc = copy.copy(s) # >>> sc[1, 2, 3]
>>> sdc = copy.deepcopy(s) #
>>> sdc
[1, 2, 3]
복사 한 대상 은 값 만 같 을 뿐 실제로는 다른 대상 이다
>>> s == sc == sdc
True
>>> s is sc
False
>>> s is sdc
False
그렇다면 얕 은 복사(shallow copy)와 깊 은 복사(deep copy)는 어떤 차이 가 있 습 니까?가 변 적 이지 않 은 대상,예 를 들 어 정수,문자열,원조,그리고 이런 가 변 적 이지 않 은 대상 으로 구 성 된 집합 대상 은 얕 은 복사 와 깊 은 복사 가 다 르 지 않 고 모두 새로운 대상 을 복사 하 는 것 이다.
이들 의 차 이 는 조합 대상 을 복사 하 는 것 이다.예 를 들 어 목록 에 목록 이 있 고 사전 에 사전 이나 목록 이 있 을 때 얕 은 복사 본 은 바깥 의 케이스 만 복사 했다.안의 요 소 는 복사 하지 않 았 고 깊 은 복사 본 은 케이스 와 안의 요 소 를 모두 새 것 으로 복사 했다.
예 를 들 어 보 겠 습 니 다.
>>> x = [2, 3]
>>> y = [7, 11]
>>> z = [x, y]
>>> a = copy.copy(z) #
>>> a[0] is z[0]
True
복사 한 대상 a 의 요 소 는 x 와 y 를 참조 합 니 다.x 의 값 을 수정 하면 a 도 달라 집 니 다.
>>> b = copy.deepcopy(z) #
>>> b[0] is z[0]
False
깊 은 복사 에 있어 안의 요소 도 한 부 를 다시 복사 하고 x 와 y 등 값 의 두 요 소 를 복사 했다.x 와 y 의 값 을 수정 하면 b 에 영향 을 주지 않 는 다.
목록 의 절편 복사 z[:]또는 호출 대상 의 copy 방법 list.copy()는 모두 얕 은 복사 에 속 합 니 다.사용자 정의 대상 에 대해 우 리 는 스스로 실현 할 수 있다copy__방법 과deepcopy__방법.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 글 을 통 해 Python 할당 과 복사 본 을 읽 고 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.