>  기사  >  백엔드 개발  >  Python 가변 객체와 불변 객체에 대한 자세한 분석

Python 가변 객체와 불변 객체에 대한 자세한 분석

coldplay.xixi
coldplay.xixi앞으로
2020-07-09 17:35:012768검색

Python 가변 객체와 불변 객체에 대한 자세한 분석

파이썬의 모든 것은 객체로 볼 수 있습니다. 각 객체에는 고유한 ID, 유형 및 값이 있습니다.

  1. id: 객체가 생성되면 해당 ID는 변경되지 않습니다. 여기서 id는 실제로 메모리에 있는 객체의 주소입니다. id()를 사용하여 메모리에 있는 객체의 주소를 확인할 수 있습니다.
  2. type: id와 마찬가지로 객체가 생성되면 유형을 변경할 수 없습니다.
  3. value: 객체의 값은 가변적입니다. . 값 값이 변경을 지원하는지 여부에 따라 다릅니다.
관련 학습 권장사항:

python 비디오 튜토리얼

불변 객체

일반적인 불변 객체(불변 객체):

번호: int, float, complex

string
  1. tuple
  2. Frozenset: 또 다른 집합의 종류
  3. 예를 통해 경험해 보자
Example

>>> 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 값이 변경되지 않으므로 여전히 불변 객체입니다.

가변 객체

일반적인 가변 객체:

list

dict
  1. set
  2. 예제를 통해 비슷하게 느껴보세요
예제

>>> c = [1,2,3]
>>> b = c
>>> id(b)==id(c)
True

2개 만들기 객체를 나열하고 c, d가 포인트가 되도록 둡니다. 그런 다음 c

c[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

4:1, id:4343768416

일부 다른 글에서는 위의 eg0을 참조 전달, eg1을 값 전달이라고 합니다. 그러나 공식 문서에는 이 두 용어와 관련된 내용이 발견되지 않았거나 이 방법은 위 두 가지 중 하나가 아닙니다.

여기서 핵심은 다음과 같습니다.

변경 가능한 개체의 경우 함수 값을 변경하면 개체가 변경됩니다. 불변 개체의 경우 함수 값을 변경해도 개체에 아무런 영향이 없습니다.

위 내용은 Python 가변 객체와 불변 객체에 대한 자세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제