MutableとImmutable
ソース-Wikidocsのアップグレード
bリストオブジェクトをバインドします.
aとbがバインドされた各オブジェクトのアドレスを出力すると、それらの違いがわかります.
変数とオブジェクトの関係は、上の画像で表すことができます.
Pythonでは、オブジェクトに修正可能なタイプもあれば、修正不可能なタイプもあります.変更不可オブジェクトを可変オブジェクト、変更可能オブジェクトをマルチテーブルオブジェクトと呼びます.
まず、次のコードを実行して、メモリの変化を理解します.
今回はリストを修正します.aという名前の変数はリストオブジェクトをバインドします.リストに値を追加すると、リストオブジェクトの先頭アドレス値は変更されません.
リストを画像として表示
a = "hello"
b = ["hello","python"]
a文字列オブジェクトをバインドします.bリストオブジェクトをバインドします.
aとbがバインドされた各オブジェクトのアドレスを出力すると、それらの違いがわかります.
# 변수 a
>>> 2074836971056
# 변수 b
>>> 2074834186368
私はあなたたちが違うことを知っています.では、変数aでバインドされた「hello」文字列オブジェクトとbリストの「0」でバインドされた文字列「hello」は同じオブジェクトですか?id(a)
>>> 2074836971056
id(b[0])
>>> 2074836971056
id(b)
>>> 2074834186368
id(b[1])
>>> 2074836971440
以上の結果から、aとb[0]は同じオブジェクトであり、リストbとb[1]は異なるオブジェクトであることがわかる.変数とオブジェクトの関係は、上の画像で表すことができます.
ImmutableとMutable
Pythonでは、オブジェクトに修正可能なタイプもあれば、修正不可能なタイプもあります.変更不可オブジェクトを可変オブジェクト、変更可能オブジェクトをマルチテーブルオブジェクトと呼びます.
可変オブジェクト:int、float、str、tuple
Mutableオブジェクト:list,dict
まず、次のコードを実行して、メモリの変化を理解します.
a = "python2"
id(a)
>>> 2074836971632
a = "python3"
id(a)
>>> 2074836971888
上記のコードは、次の順序で実行されます.1) 'python2' 문자열 객체가 메모리의 2074836971632 번지에 할당되고 해당 객체를 a라는 변수가 바인딩 함
2) 'python3' 문자열 객체가 메모리의 2074836971888 번지에 할당되고
해당 객체를 a라는 변수가 바인딩 함
3) 'python2' 라는 문자열 객체는 아무도 자신을 참조하지 않기 때문에 가비지 컬렉터에 의해 자동으로 메모리에서 소멸 됨
これは、文字列オブジェクトが変更できないため、「python 2」では文字列「python 3」ではなく、新しいオブジェクトが割り当てられます.バインドpython 2のaは、python 3をバインドすることによって「python 2」の変数をバインドしないため、reference countは0になり、割り当てが解除されます.今回はリストを修正します.aという名前の変数はリストオブジェクトをバインドします.リストに値を追加すると、リストオブジェクトの先頭アドレス値は変更されません.
a = ['python2','python3']
id(a)
>>> 2074834190080
a.append('python4')
id(a)
>>> 2074834190080
id(a[0])
>>> 2074836971632
id(a[1])
>>> 2074836972208
id(a[2])
>>> 2074836972400
リストオブジェクトには、文字列オブジェクトを再バインドする構造があり、[0]回、[1]回、[2]回がリスト内の要素です.したがって、リストに要素を追加または削除すると、リストオブジェクトの開始アドレスは変更されません.Reference
この問題について(MutableとImmutable), 我々は、より多くの情報をここで見つけました https://velog.io/@donghak/Mutable과-Immutableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol