복붙노트

[PYTHON] 파이썬에서 정수가 불변 인 이유는 무엇입니까? [복제]

PYTHON

파이썬에서 정수가 불변 인 이유는 무엇입니까? [복제]

Python에서 변경 가능 객체와 불변 객체의 차이점을 이해합니다. 차이점을 논의하는 많은 게시물을 읽었습니다. 그러나, 나는 정수가 불변 인 객체에 대해서는 아무 것도 읽지 않았다.

이것에 대한 이유가 있습니까? 아니면 "그게 어떻게 된거 야?"라는 대답입니까?

편집 : 그것은 이전 질문 물어 것으로 보인다 다른 질문 에서이 질문을 '차별화하라는 메시지가 나타납니다. 그러나 필자는 필자가 기술적 인 파이썬 질문보다는 철학적 인 파이썬 질문에 더 가깝다고 생각한다.

Python의 '기본'객체 (즉, 문자열, 부울, 숫자 등)는 변경되지 않는 것으로 보입니다. 또한 프리미티브 (예 : dicts, 목록, 클래스)로 구성된 파생 데이터 유형이 변경 가능하다는 사실을 알고 있습니다.

오브젝트가 변경 가능한지 여부에 관계없이 라인이 그려지는 곳입니까? 원시 대 파생 된?

해결법

  1. ==============================

    1.정수를 변경 가능하게 만드는 것은 우리가 작업하는 방식에 매우 직관적입니다.

    정수를 변경 가능하게 만드는 것은 우리가 작업하는 방식에 매우 직관적입니다.

    다음 코드 조각을 고려하십시오.

    a = 1       # assign 1 to a
    b = a+2     # assign 3 to b, leave a at 1
    

    이러한 할당이 실행 된 후 a는 값 1과 b의 값이 3이 될 것으로 기대합니다. 추가 연산은 a에 저장된 정수와 정수 2의 인스턴스에서 새 정수 값을 생성합니다. 만약 가산 연산이 a에서 정수를 가져 와서 단지 돌연변이한다면, a와 b는 모두 값 3을 가질 것입니다.

    따라서 우리는 산술 연산이 입력 매개 변수를 변경하지 않고 결과에 새로운 값을 생성 할 것으로 기대합니다.

    그러나 데이터 구조를 변경하는 것이 더 편리하고 효율적인 경우가 있습니다. list.append (x)가 list를 수정하지 않았지만 x가 추가 된 목록의 새로운 사본을 반환했다고 가정 해 봅시다. 다음과 같은 함수 :

    def foo():
      nums = []
      for x in range(0,10):
        nums.append(x)
      return nums
    

    그냥 빈 목록을 반환합니다. 여기서 nums.append (x)는 num을 변경하지 않고 x가 추가 된 새 목록을 반환하지만이 새 목록은 아무 곳에도 저장되지 않습니다.

    다음과 같이 foo 루틴을 작성해야합니다.

    def foo():
      nums = []
      for x in range(0,10):
        nums = nums.append(x)
      return nums
    

    (사실 이것은 파이썬 문자열이 2.6이나 2.5 정도가 될 때와 매우 유사합니다.)

    또한 nums = nums.append (x)를 지정할 때마다 크기가 증가하는 목록을 복사하여 2 차 동작을 발생시킵니다. 이러한 이유로 우리는 변경 가능한 객체를 나열합니다.

    목록을 변경 가능하게 만드는 결과는 다음과 같은 내용입니다.

    a = [1,2,3]
    b = a
    a.append(4)
    

    목록 b가 [1,2,3,4]로 변경되었습니다. 이것은 우리가 지금도 여전히 우리를 여행하더라도 우리가 살아가는 것입니다.

  2. ==============================

    2.파이썬에서 숫자를 불변으로 만드는 디자인 결정은 무엇입니까?

    파이썬에서 숫자를 불변으로 만드는 디자인 결정은 무엇입니까?

    불변성에 대한 몇 가지 이유가 있습니다. 먼저 불변성에 대한 이유는 무엇입니까?

    1- 메모리

    2 - 빠른 실행.

    3- 보안 :

    사용하기 쉬운 4-

    5- 키는 변경 가능해야합니다. 즉, 문자열, 숫자 또는 튜플을 사전 키로 사용할 수 있습니다. 이것은 당신이 사용하기를 원하는 것입니다.

    The hash table implementation of dictionaries uses a hash value calculated from the key value to find the key. If the key were a mutable object, its value could change, and thus its hash could also change. But since whoever changes the key object can’t tell that it was being used as a dictionary key, it can’t move the entry around in the dictionary. Then, when you try to look up the same object in the dictionary it won’t be found because its hash value is different. If you tried to look up the old value it wouldn’t be found either, because the value of the object found in that hash bin would be different.
    

    정수로 돌아 가기 :

  3. from https://stackoverflow.com/questions/37535694/why-are-integers-immutable-in-python by cc-by-sa and MIT license