Select Language

AI Technology Community

2.26、Python変数、オブジェクトと値の関係

前の例では、既に変数を使用しています。例えば:

>>> a = 12

これで変数が作成され、変数の値は12になりますが、オブジェクトについてはあまり触れていません。

変数は、記号または名前です。現実生活に例えると、身分証明書に相当します。

オブジェクトは、メモリ空間の一部です。簡単に言えば、メモリの一部です。現実生活に例えると、具体的な人に相当します。オブジェクトには多くの属性があり、その中の1つが型です。同じ型のオブジェクトには、多くの共通する属性があります。型は、国籍に似ています。同じ国籍の人は異なっていても、多くの共通する属性があります。例えば、すべての中国人は戸籍という属性を持っていますが、他の国の人はこの属性を持っていません。

値は、オブジェクトの詳細な属性です。例えば、ある整数型のオブジェクトの値は100で、別の整数型のオブジェクトの値は800です。

図1は、これらの関係を表しています。

変数、オブジェクトと値の関係
図1:変数、オブジェクトと値の関係


これらの関係は、各変数は必ずあるオブジェクトに対応し、変数の値はその変数に対応するオブジェクトの値です。各オブジェクトには、id、型、値という3つの基本属性があります。各オブジェクトのidは異なりますが、2つの異なるオブジェクトの型と値は同じになることがあります。

「id(変数名)」を使用して、オブジェクトのidを取得することができます。

>>> a = 12
>>> id(a)      # 変数aに対応するオブジェクトのidを取得
140377101203968
>>> b = "abc"  # 新しい文字列オブジェクトを作成し、変数bをそのオブジェクトに指向させる
>>> id(b)      # 変数bに対応するオブジェクトのidを取得
4370848984

「type(変数名)」を使用して、オブジェクトの型を確認することができます。

>>> a = 12
>>> type(a)<type 'int'>
>>> b = "abc"
>>> type(b)<type 'str'>

変数名を使用して、オブジェクトの値を取得することができます。

>>> a = 12  # 値が12のオブジェクトを作成し、aで記録する
>>> a       # aに対応するオブジェクトの値を取得
12
>>> a = 13  # aに対応するオブジェクトの値を変更する
>>> a       # aに対応するオブジェクトの値を取得
13

先ほど、ある変数は必ず対応するオブジェクトがあると述べました。では、時間の経過とともに、ある変数が別のオブジェクトに対応することはできますか?これは可能です。

>>> a = 12
>>> id(a)
140377101203968
>>> a = "abc"
>>> id(a)  # idが変化し、変数aに対応するオブジェクトも変化した
4370848984

この過程は、図2で表すことができます。最初は、変数aは値が12のオブジェクトを指していましたが、後にaは新しいオブジェクトを指すようになり、そのオブジェクトの値は「abc」です。

変数の再代入
図2:変数の再代入


では、2つの変数が同じオブジェクトに対応することはできますか?答えは肯定的です。例えば、以下のような場合です。

>>> a = [1, 2, 3, 4]
>>> id(a)
4370717152
>>> b = a
>>> id(b)   # 変数bに対応するオブジェクトと変数aに対応するオブジェクトのidが同じ
4370717152  # これは、aとbが同じオブジェクトを指していることを示しています


この状況は、図3で表すことができます。

変数がオブジェクトを共有する
図3:変数がオブジェクトを共有する


このとき、aの変更とbの変更は同じです。

>>> a = [1, 2, 3, 4]
>>> id(a)
4370717152
>>> b = a
>>> id(b)
4370717152
>>> a.append(100)  # 変数aが指すオブジェクトを変更する
>>> a
[1, 2, 3, 4, 100]
>>> b              # bが指すオブジェクトも変更された
[1, 2, 3, 4, 100]


では、2つの変数が同じオブジェクトに対応しているかどうかは、どうやって判断すればいいですか?idが等しいかどうかを判断することで確認できます。

>>> a = [1, 2, 3, 4]
>>> b = a
>>> id(a) == id(b)  # aとbのidが等しいかどうかを判断する
True


is演算子を使用して判断することもできます。以下のように:

>>> a = [1, 2, 3, 4]
>>> b = a
>>> a is b
True


別のケースとして、2つの異なるオブジェクトが同じ値を持つ場合があります。

>>> a = 1024
>>> b = 1000 + 24
>>> a
1024
>>> b
1024
>>> id(a)   # 変数aが指すオブジェクトと変数bが指すオブジェクトは2つのオブジェクト
140377101238440
>>> id(b)
140377101238464
>>> a is b  # このとき、is演算子を使用するとFalseが返されます
False


この状況は、図4で表すことができます。

異なるオブジェクトの値が同じ
図4:異なるオブジェクトの値が同じ


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。