Python의 변경 가능 및 불변 객체 {예}

가변 객체란 무엇입니까?

Python에서 Mutable은 변경될 수 있거나 본질적으로 변경 가능한 것으로 간주될 수 있는 개체로 정의할 수 있습니다. 변경 가능이란 값을 수정하거나 편집할 수 있는 기능을 의미합니다.

Python의 가변 객체를 통해 프로그래머는 자신의 값을 변경할 수 있는 객체를 가질 수 있습니다. 일반적으로 데이터 모음을 저장하는 데 사용됩니다. 변이된 것으로 볼 수 있으며, 객체 내에서 적용 가능한 내부 상태가 변경된 것입니다.

불변 객체란 무엇입니까?

Python의 불변 객체는 시간이 지나도 값과 속성이 변경되지 않는 객체로 정의될 수 있습니다.
이러한 객체는 일단 생성되고 초기화되면 영구적이 되며 Python에서 사용되는 데이터 구조의 중요한 부분을 형성합니다.

파이썬은 숫자로 사용됩니다. 튜플, 문자열, 고정 세트 및 사용자 정의 클래스(몇 가지 예외가 있음). 그것들은 변경할 수 없으며 일단 초기화되면 그 값과 값은 영구적으로 유지되므로 불변이라고 불립니다.

파이썬에서는 모든 것이 객체입니다.

Python 프로그래밍 언어에서는 모든 것이 목록, 정수 및 함수로 구성된 객체로 간주될 수 있습니다. 이 기능은 객체를 지원하는 다른 프로그래밍 언어와 비교할 수 있습니다.

이 기능은 아래와 같이 Python 인터프리터를 사용하여 확인할 수 있습니다. –

파이썬 코드:

print("The following instance is an object:",isinstance(3,object))
print("Another instance for object", isinstance(True, object))
def my_func():
    return "guru99"
print("This is a function example and regarded as an object in Python:", isinstance(my_func, object))

출력:

A following instance is an object: True
Another instance for object True
This is a function example and regarded as an object in Python: True

또한 Python은 Python 프로그래밍 언어의 메모리에 있는 객체의 주소를 반환하는 id라는 내장 함수를 제공합니다.

파이썬 코드:

z=200
id(z)
print("The id of object is", id(z))

출력:

the id of object is 9795360

위 코드에서 id(obj) 구문을 갖는 id 함수는 Python 메모리에 있는 obj의 주소를 제공합니다. 여기에는 z라는 개체가 있고 할당량이 200입니다. 그런 다음 개체 z는 id(z)로 id 함수에 전달되고 Python은 개체의 주소를 9795360으로 전달합니다.

Python의 변경 가능한 객체

가변 객체에서는 객체의 값이 일정 기간에 걸쳐 변경됩니다.

이 예에서는 Python의 가변 객체를 설명했으며, 아래와 같이 가변 객체의 응용 프로그램으로 목록을 활용합니다. –

파이썬 코드:

mut_list = [1, 2, 3]
  print("The list in Python",mut_list)
mut_list[0] = 'Gurru99'
mut_list
  print("The list in Python after changing value",mut_list)

출력:

The list in Python [1, 2, 3]
The list in Python after changing value ['Gurru99', 2, 3]

위의 예에서 볼 수 있듯이 Python의 변경 가능한 목록에는 1,2,3의 값이 있습니다. 가변 목록의 첫 번째 요소는 1에서 Guru99로 변경되며, 새 값이 초기화될 때 새 객체를 생성하지 않습니다.

여기서는 id 메소드를 사용하여 이를 활용할 수 있습니다. 폴로wing 아래와 같이 변경 가능한 객체에 대한 id 메소드의 사용을 보여줍니다. –

파이썬 코드:

mut_list = [1, 2, 3]
print("The list in Python",mut_list)
print("the id of the list is ",id(mut_list))
mut_list[0] = 'Gurru99'
mut_list
print("The mut list in Python after changing value",mut_list)
print("the id of the list is post change in value",id(mut_list))

산출

The list in Python [1, 2, 3]
the id of the list is 139931568729600
The list in Python after changing value ['Gurru99', 2, 3]
the id of the list is post change in value 139931568729600

더 폴로wing 그림은 아래와 같이 Python의 변경 가능한 객체를 보여줍니다. –

Python의 변경 가능한 객체

Python의 불변 객체

Python의 불변 객체는 인스턴스가 기간 동안 변경되지 않는 객체입니다. 특정 유형의 불변 인스턴스는 한번 생성되면 변경되지 않으며 이는 Python의 id 메소드를 사용하여 확인할 수 있습니다.

아래와 같이 Python의 불변 객체 개념을 보여주는 Python의 정수 유형 객체의 예를 들어 보겠습니다. –

파이썬 코드:

a=244
print("the number before change is",a)
print("the id of number before change is",id(a))
a=344
print("the number after change is",a)
print("the id of number after change is",id(a))

산출

the number before a change is 244
the id of number before change is 9796768
the number before change is 344
the id of number before change is 140032307887024

위에서 'a'에 변화가 있음을 알 수 있다. 메커니즘이 어떻게 작동하는지 연구해 보겠습니다.

  • "a"를 344로 초기화해도 객체의 값에는 변화가 없습니다.
  • 대신, 새로운 객체가 생성되고 "a"로 제한됩니다.
  • 244로 할당된 다른 개체는 더 이상 액세스할 수 없습니다.
  • 위의 예에서는 정수 객체를 활용했습니다.

a=244에서 아래와 같이 새 객체가 생성되고 "a"를 참조합니다.

Python의 불변 객체

a=344를 사용하여 게시하면 "a"로 참조되는 새 개체가 있습니다. 추종자wing 다이어그램은 동일함을 나타냅니다. –

Python의 불변 객체

따라서 int 유형의 이름에 새 값이 할당될 때마다 이름과 다른 객체의 바인딩이 변경됩니다. 동일한 원리가 튜플에도 적용됩니다. 문자열, float 및 Boolean 따라서 불변이라고 합니다.

Python의 사전 키에 대한 의미

사전은 데이터를 키 형식으로 저장하고 중복을 허용하지 않는 정렬된 컬렉션으로 정의할 수 있습니다. 사전에는 해당 값 쌍이 정렬된 하나의 키가 포함되어 있습니다. 유형이 변경 가능하며 초기화 및 생성 후에도 내용이 변경될 수 있습니다.

언제든지 핵심은 한 번에 하나의 특정 요소를 가리킵니다. 사전의 키는 변경할 수 없습니다.

아래와 같이 가상의 시나리오를 생각해 보겠습니다. –

a = [4, 6]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

출력: – 위의 Python 코드는 출력을 생성하지 않고 대신 해시할 수 없는 유형의 유형 오류를 생성합니다. 이는 가상의 상황이며 Python 컴파일러에서는 사용되지 않습니다.

여기 a 는 [4,6]으로 정의되어 있고 사전에는 x로 정의되어 있습니다. 여기, b 는 [5,6,7]로 정의되어 있고, 사전에는 y로 정의되어 있습니다.

  • 키 'a'는 [4,6]의 값을 가지며 x로 추가로 초기화됩니다.
  • 키 'b'에는 사전에서 'y'로 추가로 초기화되는 [5,6,7] 값이 있습니다.
  • 이제 '의 값이 있다고 가정합니다.ㅏ' 에는 사전의 키인 5와 7이 추가됩니다.
  • 그런 다음 사전이 변경되어 두 가지를 모두 제공합니다. 'NS' '와이' 위 사전의 값으로.

다음을 고려하십시오.wing 위에 설명된 시나리오: –

a = [5, 6,7]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

따라서 프로그래밍 언어로서 Python은 사전의 키를 불변으로 만들고 사전은 불변의 데이터 유형입니다.

불변성의 예외

그러나 Python은 불변성에 대한 예외를 제공합니다. 이러한 예외는 튜플 객체 유형에서 관찰될 수 있습니다. 튜플은 변경 가능한 객체 유형과 불변 객체 유형의 조합일 수 있습니다. 아래와 같이 불변성의 예외를 설명하는 예를 들어 보겠습니다.

파이썬 코드:

tupexample=([1,1],'guru99')
print("the tuple before change",tupexample)
print("the id of tuple before change",id(tupexample))
tupexample=([2,2],'guru99')
print("the tuple after change",tupexample)
print("the id of tuple after change",id(tupexample))

출력:

the tuple before change ([1, 1], 'guru99')
the id of tuple before change 140649480694656
the tuple after change ([2, 2], 'guru99')
the id of tuple after change 140649480694592

위 코드에서 볼 수 있듯이 첫 번째 요소인 목록은 변경 가능하지만 튜플은 변경할 수 없습니다. 튜플의 값은 변경할 수 없지만 튜플 내부에 있는 목록의 내용은 해당 값을 변경할 수 있습니다.

따라서 불변 객체는 값을 변경하지 않지만 구성 요소의 값은 해당 값을 변경한다는 예외가 발생합니다.

변경 가능한 객체와 불변 객체

변경 가능한 객체와 불변 객체의 주요 차이점은 다음과 같습니다.

가변 객체 불변 객체
객체 상태는 생성된 후에 변경될 수 있습니다. 객체 상태는 일단 생성되면 변경할 수 없습니다.
변경 가능한 객체는 본질적으로 스레드로부터 안전한 것으로 간주되지 않습니다. 불변 객체는 본질적으로 스레드로부터 안전한 것으로 간주됩니다.
변경 가능한 개체는 최종적으로 만들어지지 않으므로 프로그래머는 변경 가능한 개체를 계속 변경하고 동일한 개체를 사용할 수 있습니다. 불변 객체가 생성될 때 클래스를 최종으로 만드는 것이 중요합니다.

Python 불변 데이터 유형

클래스 설명 불변 여부
부울 부울 값 변경할 수없는
INT 정수 값(크기는 임의적일 수 있음) 변경할 수없는
흙손 부동 소수점 숫자 변경할 수없는
명부 변경 가능한 성격의 객체 시퀀스 변하기 쉬운
튜플 불변의 성격을 지닌 객체의 순서 변경할 수없는
스트레스 문자/문자열 변경할 수없는
세트 정렬되지 않은 성격을 지닌 별개의 개체 집합 변하기 쉬운
냉동세트 불변 자연의 클래스 설정 변경할 수없는
딕셔너리 사전 또는 연관 매핑 변하기 쉬운