변경 가능 및 불변 객체 Python

⚡ 스마트 요약

가변 객체와 불변 객체 Python 리스트나 딕셔너리와 같은 가변형 타입은 생성 후 상태가 변하는지 여부에 따라 구분됩니다. 가변형 타입은 생성 직후 상태가 변하는 반면, 문자열이나 튜플과 같은 불변형 타입은 상태가 변하지 않습니다.

  • 🔘 정의: 변경 가능한 객체는 생성된 후 값을 변경할 수 있지만, 변경 불가능한 객체는 한 번 생성되면 값을 변경할 수 없습니다.
  • ☑️ 변경 가능한 유형: 리스트, 딕셔너리, 세트는 생성 후 새 객체를 생성하지 않고도 수정할 수 있습니다.
  • ✅ 불변 타입: 정수, 부동 소수점, 불리언, 문자열, 튜플 및 frozenset은 한 번 초기화되면 고정된 값을 유지합니다.
  • 🔑 사전 키: 키로는 변경 불가능하고 해시 가능한 객체만 사용할 수 있으므로 조회 결과가 안정적으로 유지됩니다.
  • 🤖 AI의 관련성: 머신러닝 배열과 텐서는 변경 가능하므로 trac제자리 편집 기능은 재현성을 보장합니다.

가변성과 불변성 Python

가변 객체란 무엇입니까?

변경 가능 Python 변화할 수 있는 대상 또는 본질적으로 변화할 수 있는 것으로 간주될 수 있는 대상으로 정의될 수 있습니다. 변경 가능이란 값을 수정하거나 편집할 수 있는 기능을 의미합니다.

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

불변 객체란 무엇입니까?

불변 객체 Python 고정 객체는 시간이 지나도 값과 속성이 변하지 않는 객체로 정의할 수 있습니다. 이러한 객체는 생성 및 초기화된 후에는 영구적으로 유지되며, 데이터 구조에서 중요한 부분을 차지합니다. Python.

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

In 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 메모리에 있는 객체의 주소를 반환하는 id라는 내장 함수를 제공합니다. Python 프로그래밍 언어.

Python 암호:

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

출력:

the id of object is 9795360

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

변경 가능한 객체 Python

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

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

Python Code:

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에서 3으로 변경됩니다. Guru99이고, 새로운 값이 초기화될 때 새 객체를 생성하지 않습니다.

여기서 우리는 id 메서드를 사용하여 그것을 활용할 수 있습니다. 다음은 아래와 같이 변경 가능한 객체에 대한 id 메서드의 사용을 보여줍니다. –

Python Code:

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

다음 그림은 변경 가능한 객체를 보여줍니다. Python 아래와 같이: –

변경 가능한 객체 Python

불변 객체 Python

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

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

Python Code:

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"로 참조되는 새 객체가 있습니다. 다음 다이어그램은 동일한 것을 나타냅니다. –

불변 객체 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' '와이' 위 사전의 값으로.

위에 그림으로 설명된 다음 시나리오를 고려하십시오. –

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

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

불변성의 예외

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

Python Code:

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

자주 묻는 질문

문자열은 불변(immutable)이므로 해시값이 일정하게 유지되며 딕셔너리 키나 세트 멤버로 사용할 수 있습니다. replace()나 upper() 같은 메서드는 원본 문자열을 수정하는 대신 새로운 문자열을 반환합니다.

튜플은 불변입니다. Python 딕셔너리 키에 대해 해시 함수를 사용하여 고정된 데이터를 실수로 변경되는 것으로부터 보호할 수 있습니다. 리스트는 크기가 커지거나 작아지는 컬렉션을 위해 설계되었기 때문에 변경 가능한 상태를 유지합니다.

def f(x, items=[])와 같이 변경 가능한 기본값은 위험합니다. Python 리스트는 한 번만 생성되므로 함수 호출 간에 유지됩니다. items=None을 사용한 다음 함수 내부에서 items = []를 할당하세요.

`copy` 모듈을 사용하세요. `copy.copy()`는 중첩된 객체를 공유하는 얕은 복사본을 만들고, `copy.deepcopy()`는 모든 레벨을 복제합니다. 슬라이싱이나 `list(original)`도 얕은 복사본을 만듭니다.

frozenset은 집합의 불변 버전입니다. 요소를 추가하거나 잃을 수 없으므로 해시 가능하며 딕셔너리 키 또는 집합 요소로 사용할 수 있습니다.

불변 객체는 해시 가능하므로 딕셔너리의 키나 집합의 멤버로 사용할 수 있습니다. 또한 스레드로부터 안전하고, 이해하기 쉬우며, 작은 정수의 인터닝과 같은 최적화를 가능하게 합니다.

데이터 과학은 NumPy 배열, pandas DataFrame, Py와 같은 가변 구조에 의존합니다.Torch 텐서는 속도를 위해 제자리에서 변경됩니다. AI 파이프라인은 이러한 텐서를 공유하므로, trac재현성을 유지하기 위해 k개의 현장 편집을 수행합니다.

예. GitHub Copilot과 AI 비서들은 변경 가능한 기본 인수를 표시하고, deepcopy를 제안하며, 고정 데이터의 경우 튜플이나 frozenset을 사용할 것을 권장합니다. Rev제안 내용이 미묘한 위치 변경 버그를 놓칠 수 있으므로 출력 결과를 확인하십시오.

이 게시물을 요약하면 다음과 같습니다.