파이썬의 모든 것은 객체로 볼 수 있습니다. 각 객체에는 고유한 ID, 유형 및 값이 있습니다.
python 비디오 튜토리얼
일반적인 불변 객체(불변 객체):
번호: int, float, complexstring>>> x=1 >>> y=x >>> id(x)==id(y) True >>> id(1)==id(y) True
여기서 두 개의 int 객체가 생성되고 x와 y가 동일한 객체를 가리키도록 한 다음 x를 수정하려고 합니다. x+1>>>x=x+1
이때 x의 id 값은 여전히 y의 id, 1의 id와 동일합니까?
>>> x=x+1 >>> id(x)==id(y) False >>> id(x)==id(1) False >>> id(1)==id(y) True
x가 가리키는 객체는 바뀌었지만 1은 바뀌지 않았다는 것을 결과를 보면 어렵지 않게 알 수 있습니다. 이는 불변 객체입니다. 불변 객체의 경우 일단 생성되면 변경할 수 없습니다.
참고: 불변성은 절대적 불변성과 엄격하게 동일하지 않습니다
>>> a=([1],2,3) >>> id(a) 4338862696 >>> id(a[0]) 4338949128 >>> a[0][0]=0 >>> id(a) 4338862696 >>> id(a[0]) 4338949128
위의 예에서 a[0]의 값을 변경했지만 id 값에는 영향을 미치지 않았다는 것을 쉽게 알 수 있습니다. 불변 컨테이너 객체에 가변 객체에 대한 참조가 포함되어 있는 경우 후자가 변경되면 전자의 값도 변경되지만 컨테이너는 id 값이 변경되지 않으므로 여전히 불변 객체입니다.
가변 객체일반적인 가변 객체:
listdict>>> c = [1,2,3] >>> b = c >>> id(b)==id(c) True
2개 만들기 객체를 나열하고 c, d가 포인트가 되도록 둡니다. 그런 다음 cc[0]=4
를 수정하려고 합니다. 이때 두 객체의 id 값이 일치하는지 확인하세요
>>> id(c)==id(b) True
수정 후에도 c, d는 여전히 동일한 객체를 가리키므로 변경 가능한 개체의 경우 값을 수정해도 해당 ID에 아무런 영향을 미치지 않는다는 결론을 내리는 것은 어렵지 않습니다. 4457707912
4:[5, 6, 10], id:4457707912다른 예를 보면
eg1
def update_list(nums_list): print(f'2 id:{id(nums_list)}') nums_list += [10] print(f'3 id:{id(nums_list)}') number_list = [5, 6] print(f'1:{number_list}, id:{id(number_list)}') update_list(number_list) print(f'4:{number_list}, id:{id(number_list)}')
결과를 보세요
1:1, id:4343768 416
2 id:4343768416 3 id:4343768448
일부 다른 글에서는 위의 eg0을 참조 전달, eg1을 값 전달이라고 합니다. 그러나 공식 문서에는 이 두 용어와 관련된 내용이 발견되지 않았거나 이 방법은 위 두 가지 중 하나가 아닙니다.
여기서 핵심은 다음과 같습니다.
변경 가능한 개체의 경우 함수 값을 변경하면 개체가 변경됩니다. 불변 개체의 경우 함수 값을 변경해도 개체에 아무런 영향이 없습니다.위 내용은 Python 가변 객체와 불변 객체에 대한 자세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!