可変オブジェクトと不変オブジェクト 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関数にid(z)として渡され、 Python オブジェクトのアドレスを 9795360 として返します。

可変オブジェクト Python

可変オブジェクトでは、オブジェクトの値は時間の経過とともに変化します。

この例では、可変オブジェクトについて説明しました。 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、99 でした。可変リストの最初の要素は XNUMX から GuruXNUMX に変更され、新しい値が初期化されても新しいオブジェクトは作成されません。

ここでは、id メソッドを使用してこれを活用できます。以下は、変更可能なオブジェクトに対する id メソッドの使用法を示しています。

Python コード:

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 コード:

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

ディクショナリは、データをキー形式で保存し、重複を許可しない順序付けられたコレクションとして定義できます。 ディクショナリには、対応する値のペアが対応するキーが XNUMX つ含まれています。 これらは型が変更可能であり、初期化および作成後でもその内容を変更できます。

いつでも、キーは一度に XNUMX つの特定の要素を指します。 辞書のキーは不変です。

以下に示すような仮説的なシナリオを考えてみましょう。

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」の値は [5,6,7] で、辞書内でさらに「y」に初期化されます。
  • ここで、「」の値を仮定します。a ' には、辞書のキーである 5 と 7 が追加されます。
  • 次に、辞書が変更され、両方の情報が得られます。 'バツ' 'y' 上記の辞書の値として。

上に示した次のシナリオを考えてみましょう。

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

したがって、プログラミング言語として、 Python 辞書のキーは不変になり、辞書は不変のデータ型になります。

不変性の例外

しかしながら、 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

上記のコードでは、リストである最初の要素が変更可能であるのに対し、タプルは変更不可能であることがわかります。 タプルの値は変更できませんが、タプル内に存在するリストの内容はその値を変更できます。

したがって、不変オブジェクトの値は変更されませんが、構成要素の値は値を変更するという例外が発生します。

可変オブジェクトと不変オブジェクト

可変オブジェクトと不変オブジェクトの主な違いは次のとおりです。

可変オブジェクト 不変オブジェクト
オブジェクトの状態は作成後に変更できます オブジェクトの状態は作成後に変更できません
可変オブジェクトは、本質的にスレッドセーフとは見なされません。 不変オブジェクトは本質的にスレッドセーフとみなされます。
可変オブジェクトは最終的に作成されないため、プログラマは可変オブジェクトを変更し続けて同じオブジェクトを使用できます。 不変オブジェクトを作成する場合はクラスをfinalにすることが重要です

Python 不変データ型

CLASS 説明 不変かどうか
ブール ブール値 不変
int型 整数値 (大きさは任意) 不変
フロート 浮動小数点数 不変
リスト 可変的な性質を持つオブジェクトのシーケンス 可変
タプル 不変の性質を持つオブジェクトのシーケンス 不変
筋力 文字/文字列 不変
作成セッションプロセスで 順序付けされていない性質を持つ個別のオブジェクトのセット 可変
冷凍セット 不変の性質のクラスを設定する 不変
口述 辞書または連想マッピング 可変